summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCopr dist git <copr-devel@lists.fedorahosted.org>2016-07-14 05:53:33 +0000
committerCopr dist git <copr-devel@lists.fedorahosted.org>2016-07-14 05:53:33 +0000
commit7535ccd370c3fc375eea103a35240b66b595c31f (patch)
tree16f9187adbb30b1b943378b2f251d9187c8fd5ab
parentc11f30fc69f8358bc7409a9b9ba9289cfbb2a246 (diff)
import_srpmf24
-rw-r--r--.gitignore3
-rw-r--r--0001-internal-inteernal.patch4922
-rw-r--r--Change-etcd-server-port.patch25
-rw-r--r--build-with-debug-info.patch34
-rw-r--r--disable-v1beta3.patch25
-rw-r--r--fix-support-for-ppc64le.patch40
-rw-r--r--genmanpages.sh84
-rw-r--r--hack-test-cmd.sh.patch25
-rw-r--r--hyperkube-kubectl-dont-shift-os.Args.patch24
-rw-r--r--hyperkube.server-don-t-parse-args-for-any-command.patch117
-rw-r--r--internal-to-inteernal.patch3549
-rw-r--r--kubernetes-accounting.conf4
-rw-r--r--kubernetes.spec1798
-rw-r--r--remove-apiserver-add-kube-prefix-for-hyperkube.patch66
-rw-r--r--sources3
15 files changed, 10719 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..4730499 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/contrib-18bb93d.tar.gz
+/kubernetes-4a3f9c5.tar.gz
+/origin-2e62fab.tar.gz
diff --git a/0001-internal-inteernal.patch b/0001-internal-inteernal.patch
new file mode 100644
index 0000000..2df9c01
--- /dev/null
+++ b/0001-internal-inteernal.patch
@@ -0,0 +1,4922 @@
+From cb965eaa282d735497e5e8d10b35b4867473a968 Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Tue, 20 Oct 2015 12:41:40 +0200
+Subject: [PATCH] internal->inteernal
+
+---
+ .../cloud/compute/metadata/metadata.go | 4 +-
+ .../src/google.golang.org/cloud/inteernal/cloud.go | 128 ++
+ .../cloud/inteernal/datastore/datastore_v1.pb.go | 1633 ++++++++++++++++++++
+ .../cloud/inteernal/datastore/datastore_v1.proto | 594 +++++++
+ .../cloud/inteernal/testutil/context.go | 57 +
+ .../src/google.golang.org/cloud/internal/cloud.go | 128 --
+ .../cloud/internal/datastore/datastore_v1.pb.go | 1633 --------------------
+ .../cloud/internal/datastore/datastore_v1.proto | 594 -------
+ .../cloud/internal/testutil/context.go | 57 -
+ 9 files changed, 2414 insertions(+), 2414 deletions(-)
+ create mode 100644 Godeps/_workspace/src/google.golang.org/cloud/inteernal/cloud.go
+ create mode 100644 Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.pb.go
+ create mode 100644 Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.proto
+ create mode 100644 Godeps/_workspace/src/google.golang.org/cloud/inteernal/testutil/context.go
+ delete mode 100644 Godeps/_workspace/src/google.golang.org/cloud/internal/cloud.go
+ delete mode 100644 Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.pb.go
+ delete mode 100644 Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.proto
+ delete mode 100644 Godeps/_workspace/src/google.golang.org/cloud/internal/testutil/context.go
+
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/compute/metadata/metadata.go b/Godeps/_workspace/src/google.golang.org/cloud/compute/metadata/metadata.go
+index 7753a05..2d9c630 100644
+--- a/Godeps/_workspace/src/google.golang.org/cloud/compute/metadata/metadata.go
++++ b/Godeps/_workspace/src/google.golang.org/cloud/compute/metadata/metadata.go
+@@ -29,7 +29,7 @@ import (
+ "sync"
+ "time"
+
+- "google.golang.org/cloud/internal"
++ "google.golang.org/cloud/inteernal"
+ )
+
+ type cachedValue struct {
+@@ -46,7 +46,7 @@ var (
+ )
+
+ var metaClient = &http.Client{
+- Transport: &internal.Transport{
++ Transport: &inteernal.Transport{
+ Base: &http.Transport{
+ Dial: dialer().Dial,
+ ResponseHeaderTimeout: 750 * time.Millisecond,
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/inteernal/cloud.go b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/cloud.go
+new file mode 100644
+index 0000000..af9355b
+--- /dev/null
++++ b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/cloud.go
+@@ -0,0 +1,128 @@
++// Copyright 2014 Google Inc. All Rights Reserved.
++//
++// 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 internal provides support for the cloud packages.
++//
++// Users should not import this package directly.
++package inteernal
++
++import (
++ "fmt"
++ "net/http"
++ "sync"
++
++ "golang.org/x/net/context"
++)
++
++type contextKey struct{}
++
++func WithContext(parent context.Context, projID string, c *http.Client) context.Context {
++ if c == nil {
++ panic("nil *http.Client passed to WithContext")
++ }
++ if projID == "" {
++ panic("empty project ID passed to WithContext")
++ }
++ return context.WithValue(parent, contextKey{}, &cloudContext{
++ ProjectID: projID,
++ HTTPClient: c,
++ })
++}
++
++const userAgent = "gcloud-golang/0.1"
++
++type cloudContext struct {
++ ProjectID string
++ HTTPClient *http.Client
++
++ mu sync.Mutex // guards svc
++ svc map[string]interface{} // e.g. "storage" => *rawStorage.Service
++}
++
++// Service returns the result of the fill function if it's never been
++// called before for the given name (which is assumed to be an API
++// service name, like "datastore"). If it has already been cached, the fill
++// func is not run.
++// It's safe for concurrent use by multiple goroutines.
++func Service(ctx context.Context, name string, fill func(*http.Client) interface{}) interface{} {
++ return cc(ctx).service(name, fill)
++}
++
++func (c *cloudContext) service(name string, fill func(*http.Client) interface{}) interface{} {
++ c.mu.Lock()
++ defer c.mu.Unlock()
++
++ if c.svc == nil {
++ c.svc = make(map[string]interface{})
++ } else if v, ok := c.svc[name]; ok {
++ return v
++ }
++ v := fill(c.HTTPClient)
++ c.svc[name] = v
++ return v
++}
++
++// Transport is an http.RoundTripper that appends
++// Google Cloud client's user-agent to the original
++// request's user-agent header.
++type Transport struct {
++ // Base represents the actual http.RoundTripper
++ // the requests will be delegated to.
++ Base http.RoundTripper
++}
++
++// RoundTrip appends a user-agent to the existing user-agent
++// header and delegates the request to the base http.RoundTripper.
++func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
++ req = cloneRequest(req)
++ ua := req.Header.Get("User-Agent")
++ if ua == "" {
++ ua = userAgent
++ } else {
++ ua = fmt.Sprintf("%s;%s", ua, userAgent)
++ }
++ req.Header.Set("User-Agent", ua)
++ return t.Base.RoundTrip(req)
++}
++
++// cloneRequest returns a clone of the provided *http.Request.
++// The clone is a shallow copy of the struct and its Header map.
++func cloneRequest(r *http.Request) *http.Request {
++ // shallow copy of the struct
++ r2 := new(http.Request)
++ *r2 = *r
++ // deep copy of the Header
++ r2.Header = make(http.Header)
++ for k, s := range r.Header {
++ r2.Header[k] = s
++ }
++ return r2
++}
++
++func ProjID(ctx context.Context) string {
++ return cc(ctx).ProjectID
++}
++
++func HTTPClient(ctx context.Context) *http.Client {
++ return cc(ctx).HTTPClient
++}
++
++// cc returns the internal *cloudContext (cc) state for a context.Context.
++// It panics if the user did it wrong.
++func cc(ctx context.Context) *cloudContext {
++ if c, ok := ctx.Value(contextKey{}).(*cloudContext); ok {
++ return c
++ }
++ panic("invalid context.Context type; it should be created with cloud.NewContext")
++}
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.pb.go b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.pb.go
+new file mode 100644
+index 0000000..be903e5
+--- /dev/null
++++ b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.pb.go
+@@ -0,0 +1,1633 @@
++// Code generated by protoc-gen-go.
++// source: datastore_v1.proto
++// DO NOT EDIT!
++
++/*
++Package pb is a generated protocol buffer package.
++
++It is generated from these files:
++ datastore_v1.proto
++
++It has these top-level messages:
++ PartitionId
++ Key
++ Value
++ Property
++ Entity
++ EntityResult
++ Query
++ KindExpression
++ PropertyReference
++ PropertyExpression
++ PropertyOrder
++ Filter
++ CompositeFilter
++ PropertyFilter
++ GqlQuery
++ GqlQueryArg
++ QueryResultBatch
++ Mutation
++ MutationResult
++ ReadOptions
++ LookupRequest
++ LookupResponse
++ RunQueryRequest
++ RunQueryResponse
++ BeginTransactionRequest
++ BeginTransactionResponse
++ RollbackRequest
++ RollbackResponse
++ CommitRequest
++ CommitResponse
++ AllocateIdsRequest
++ AllocateIdsResponse
++*/
++package pb
++
++import proto "github.com/golang/protobuf/proto"
++import math "math"
++
++// Reference imports to suppress errors if they are not otherwise used.
++var _ = proto.Marshal
++var _ = math.Inf
++
++// Specifies what data the 'entity' field contains.
++// A ResultType is either implied (for example, in LookupResponse.found it
++// is always FULL) or specified by context (for example, in message
++// QueryResultBatch, field 'entity_result_type' specifies a ResultType
++// for all the values in field 'entity_result').
++type EntityResult_ResultType int32
++
++const (
++ EntityResult_FULL EntityResult_ResultType = 1
++ EntityResult_PROJECTION EntityResult_ResultType = 2
++ // The entity may have no key.
++ // A property value may have meaning 18.
++ EntityResult_KEY_ONLY EntityResult_ResultType = 3
++)
++
++var EntityResult_ResultType_name = map[int32]string{
++ 1: "FULL",
++ 2: "PROJECTION",
++ 3: "KEY_ONLY",
++}
++var EntityResult_ResultType_value = map[string]int32{
++ "FULL": 1,
++ "PROJECTION": 2,
++ "KEY_ONLY": 3,
++}
++
++func (x EntityResult_ResultType) Enum() *EntityResult_ResultType {
++ p := new(EntityResult_ResultType)
++ *p = x
++ return p
++}
++func (x EntityResult_ResultType) String() string {
++ return proto.EnumName(EntityResult_ResultType_name, int32(x))
++}
++func (x *EntityResult_ResultType) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(EntityResult_ResultType_value, data, "EntityResult_ResultType")
++ if err != nil {
++ return err
++ }
++ *x = EntityResult_ResultType(value)
++ return nil
++}
++
++type PropertyExpression_AggregationFunction int32
++
++const (
++ PropertyExpression_FIRST PropertyExpression_AggregationFunction = 1
++)
++
++var PropertyExpression_AggregationFunction_name = map[int32]string{
++ 1: "FIRST",
++}
++var PropertyExpression_AggregationFunction_value = map[string]int32{
++ "FIRST": 1,
++}
++
++func (x PropertyExpression_AggregationFunction) Enum() *PropertyExpression_AggregationFunction {
++ p := new(PropertyExpression_AggregationFunction)
++ *p = x
++ return p
++}
++func (x PropertyExpression_AggregationFunction) String() string {
++ return proto.EnumName(PropertyExpression_AggregationFunction_name, int32(x))
++}
++func (x *PropertyExpression_AggregationFunction) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(PropertyExpression_AggregationFunction_value, data, "PropertyExpression_AggregationFunction")
++ if err != nil {
++ return err
++ }
++ *x = PropertyExpression_AggregationFunction(value)
++ return nil
++}
++
++type PropertyOrder_Direction int32
++
++const (
++ PropertyOrder_ASCENDING PropertyOrder_Direction = 1
++ PropertyOrder_DESCENDING PropertyOrder_Direction = 2
++)
++
++var PropertyOrder_Direction_name = map[int32]string{
++ 1: "ASCENDING",
++ 2: "DESCENDING",
++}
++var PropertyOrder_Direction_value = map[string]int32{
++ "ASCENDING": 1,
++ "DESCENDING": 2,
++}
++
++func (x PropertyOrder_Direction) Enum() *PropertyOrder_Direction {
++ p := new(PropertyOrder_Direction)
++ *p = x
++ return p
++}
++func (x PropertyOrder_Direction) String() string {
++ return proto.EnumName(PropertyOrder_Direction_name, int32(x))
++}
++func (x *PropertyOrder_Direction) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(PropertyOrder_Direction_value, data, "PropertyOrder_Direction")
++ if err != nil {
++ return err
++ }
++ *x = PropertyOrder_Direction(value)
++ return nil
++}
++
++type CompositeFilter_Operator int32
++
++const (
++ CompositeFilter_AND CompositeFilter_Operator = 1
++)
++
++var CompositeFilter_Operator_name = map[int32]string{
++ 1: "AND",
++}
++var CompositeFilter_Operator_value = map[string]int32{
++ "AND": 1,
++}
++
++func (x CompositeFilter_Operator) Enum() *CompositeFilter_Operator {
++ p := new(CompositeFilter_Operator)
++ *p = x
++ return p
++}
++func (x CompositeFilter_Operator) String() string {
++ return proto.EnumName(CompositeFilter_Operator_name, int32(x))
++}
++func (x *CompositeFilter_Operator) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(CompositeFilter_Operator_value, data, "CompositeFilter_Operator")
++ if err != nil {
++ return err
++ }
++ *x = CompositeFilter_Operator(value)
++ return nil
++}
++
++type PropertyFilter_Operator int32
++
++const (
++ PropertyFilter_LESS_THAN PropertyFilter_Operator = 1
++ PropertyFilter_LESS_THAN_OR_EQUAL PropertyFilter_Operator = 2
++ PropertyFilter_GREATER_THAN PropertyFilter_Operator = 3
++ PropertyFilter_GREATER_THAN_OR_EQUAL PropertyFilter_Operator = 4
++ PropertyFilter_EQUAL PropertyFilter_Operator = 5
++ PropertyFilter_HAS_ANCESTOR PropertyFilter_Operator = 11
++)
++
++var PropertyFilter_Operator_name = map[int32]string{
++ 1: "LESS_THAN",
++ 2: "LESS_THAN_OR_EQUAL",
++ 3: "GREATER_THAN",
++ 4: "GREATER_THAN_OR_EQUAL",
++ 5: "EQUAL",
++ 11: "HAS_ANCESTOR",
++}
++var PropertyFilter_Operator_value = map[string]int32{
++ "LESS_THAN": 1,
++ "LESS_THAN_OR_EQUAL": 2,
++ "GREATER_THAN": 3,
++ "GREATER_THAN_OR_EQUAL": 4,
++ "EQUAL": 5,
++ "HAS_ANCESTOR": 11,
++}
++
++func (x PropertyFilter_Operator) Enum() *PropertyFilter_Operator {
++ p := new(PropertyFilter_Operator)
++ *p = x
++ return p
++}
++func (x PropertyFilter_Operator) String() string {
++ return proto.EnumName(PropertyFilter_Operator_name, int32(x))
++}
++func (x *PropertyFilter_Operator) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(PropertyFilter_Operator_value, data, "PropertyFilter_Operator")
++ if err != nil {
++ return err
++ }
++ *x = PropertyFilter_Operator(value)
++ return nil
++}
++
++// The possible values for the 'more_results' field.
++type QueryResultBatch_MoreResultsType int32
++
++const (
++ QueryResultBatch_NOT_FINISHED QueryResultBatch_MoreResultsType = 1
++ QueryResultBatch_MORE_RESULTS_AFTER_LIMIT QueryResultBatch_MoreResultsType = 2
++ // results after the limit.
++ QueryResultBatch_NO_MORE_RESULTS QueryResultBatch_MoreResultsType = 3
++)
++
++var QueryResultBatch_MoreResultsType_name = map[int32]string{
++ 1: "NOT_FINISHED",
++ 2: "MORE_RESULTS_AFTER_LIMIT",
++ 3: "NO_MORE_RESULTS",
++}
++var QueryResultBatch_MoreResultsType_value = map[string]int32{
++ "NOT_FINISHED": 1,
++ "MORE_RESULTS_AFTER_LIMIT": 2,
++ "NO_MORE_RESULTS": 3,
++}
++
++func (x QueryResultBatch_MoreResultsType) Enum() *QueryResultBatch_MoreResultsType {
++ p := new(QueryResultBatch_MoreResultsType)
++ *p = x
++ return p
++}
++func (x QueryResultBatch_MoreResultsType) String() string {
++ return proto.EnumName(QueryResultBatch_MoreResultsType_name, int32(x))
++}
++func (x *QueryResultBatch_MoreResultsType) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(QueryResultBatch_MoreResultsType_value, data, "QueryResultBatch_MoreResultsType")
++ if err != nil {
++ return err
++ }
++ *x = QueryResultBatch_MoreResultsType(value)
++ return nil
++}
++
++type ReadOptions_ReadConsistency int32
++
++const (
++ ReadOptions_DEFAULT ReadOptions_ReadConsistency = 0
++ ReadOptions_STRONG ReadOptions_ReadConsistency = 1
++ ReadOptions_EVENTUAL ReadOptions_ReadConsistency = 2
++)
++
++var ReadOptions_ReadConsistency_name = map[int32]string{
++ 0: "DEFAULT",
++ 1: "STRONG",
++ 2: "EVENTUAL",
++}
++var ReadOptions_ReadConsistency_value = map[string]int32{
++ "DEFAULT": 0,
++ "STRONG": 1,
++ "EVENTUAL": 2,
++}
++
++func (x ReadOptions_ReadConsistency) Enum() *ReadOptions_ReadConsistency {
++ p := new(ReadOptions_ReadConsistency)
++ *p = x
++ return p
++}
++func (x ReadOptions_ReadConsistency) String() string {
++ return proto.EnumName(ReadOptions_ReadConsistency_name, int32(x))
++}
++func (x *ReadOptions_ReadConsistency) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(ReadOptions_ReadConsistency_value, data, "ReadOptions_ReadConsistency")
++ if err != nil {
++ return err
++ }
++ *x = ReadOptions_ReadConsistency(value)
++ return nil
++}
++
++type BeginTransactionRequest_IsolationLevel int32
++
++const (
++ BeginTransactionRequest_SNAPSHOT BeginTransactionRequest_IsolationLevel = 0
++ // conflict if their mutations conflict. For example:
++ // Read(A),Write(B) may not conflict with Read(B),Write(A),
++ // but Read(B),Write(B) does conflict with Read(B),Write(B).
++ BeginTransactionRequest_SERIALIZABLE BeginTransactionRequest_IsolationLevel = 1
++)
++
++var BeginTransactionRequest_IsolationLevel_name = map[int32]string{
++ 0: "SNAPSHOT",
++ 1: "SERIALIZABLE",
++}
++var BeginTransactionRequest_IsolationLevel_value = map[string]int32{
++ "SNAPSHOT": 0,
++ "SERIALIZABLE": 1,
++}
++
++func (x BeginTransactionRequest_IsolationLevel) Enum() *BeginTransactionRequest_IsolationLevel {
++ p := new(BeginTransactionRequest_IsolationLevel)
++ *p = x
++ return p
++}
++func (x BeginTransactionRequest_IsolationLevel) String() string {
++ return proto.EnumName(BeginTransactionRequest_IsolationLevel_name, int32(x))
++}
++func (x *BeginTransactionRequest_IsolationLevel) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(BeginTransactionRequest_IsolationLevel_value, data, "BeginTransactionRequest_IsolationLevel")
++ if err != nil {
++ return err
++ }
++ *x = BeginTransactionRequest_IsolationLevel(value)
++ return nil
++}
++
++type CommitRequest_Mode int32
++
++const (
++ CommitRequest_TRANSACTIONAL CommitRequest_Mode = 1
++ CommitRequest_NON_TRANSACTIONAL CommitRequest_Mode = 2
++)
++
++var CommitRequest_Mode_name = map[int32]string{
++ 1: "TRANSACTIONAL",
++ 2: "NON_TRANSACTIONAL",
++}
++var CommitRequest_Mode_value = map[string]int32{
++ "TRANSACTIONAL": 1,
++ "NON_TRANSACTIONAL": 2,
++}
++
++func (x CommitRequest_Mode) Enum() *CommitRequest_Mode {
++ p := new(CommitRequest_Mode)
++ *p = x
++ return p
++}
++func (x CommitRequest_Mode) String() string {
++ return proto.EnumName(CommitRequest_Mode_name, int32(x))
++}
++func (x *CommitRequest_Mode) UnmarshalJSON(data []byte) error {
++ value, err := proto.UnmarshalJSONEnum(CommitRequest_Mode_value, data, "CommitRequest_Mode")
++ if err != nil {
++ return err
++ }
++ *x = CommitRequest_Mode(value)
++ return nil
++}
++
++// An identifier for a particular subset of entities.
++//
++// Entities are partitioned into various subsets, each used by different
++// datasets and different namespaces within a dataset and so forth.
++//
++// All input partition IDs are normalized before use.
++// A partition ID is normalized as follows:
++// If the partition ID is unset or is set to an empty partition ID, replace it
++// with the context partition ID.
++// Otherwise, if the partition ID has no dataset ID, assign it the context
++// partition ID's dataset ID.
++// Unless otherwise documented, the context partition ID has the dataset ID set
++// to the context dataset ID and no other partition dimension set.
++//
++// A partition ID is empty if all of its fields are unset.
++//
++// Partition dimension:
++// A dimension may be unset.
++// A dimension's value must never be "".
++// A dimension's value must match [A-Za-z\d\.\-_]{1,100}
++// If the value of any dimension matches regex "__.*__",
++// the partition is reserved/read-only.
++// A reserved/read-only partition ID is forbidden in certain documented contexts.
++//
++// Dataset ID:
++// A dataset id's value must never be "".
++// A dataset id's value must match
++// ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99}
++type PartitionId struct {
++ // The dataset ID.
++ DatasetId *string `protobuf:"bytes,3,opt,name=dataset_id" json:"dataset_id,omitempty"`
++ // The namespace.
++ Namespace *string `protobuf:"bytes,4,opt,name=namespace" json:"namespace,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *PartitionId) Reset() { *m = PartitionId{} }
++func (m *PartitionId) String() string { return proto.CompactTextString(m) }
++func (*PartitionId) ProtoMessage() {}
++
++func (m *PartitionId) GetDatasetId() string {
++ if m != nil && m.DatasetId != nil {
++ return *m.DatasetId
++ }
++ return ""
++}
++
++func (m *PartitionId) GetNamespace() string {
++ if m != nil && m.Namespace != nil {
++ return *m.Namespace
++ }
++ return ""
++}
++
++// A unique identifier for an entity.
++// If a key's partition id or any of its path kinds or names are
++// reserved/read-only, the key is reserved/read-only.
++// A reserved/read-only key is forbidden in certain documented contexts.
++type Key struct {
++ // Entities are partitioned into subsets, currently identified by a dataset
++ // (usually implicitly specified by the project) and namespace ID.
++ // Queries are scoped to a single partition.
++ PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id" json:"partition_id,omitempty"`
++ // The entity path.
++ // An entity path consists of one or more elements composed of a kind and a
++ // string or numerical identifier, which identify entities. The first
++ // element identifies a <em>root entity</em>, the second element identifies
++ // a <em>child</em> of the root entity, the third element a child of the
++ // second entity, and so forth. The entities identified by all prefixes of
++ // the path are called the element's <em>ancestors</em>.
++ // An entity path is always fully complete: ALL of the entity's ancestors
++ // are required to be in the path along with the entity identifier itself.
++ // The only exception is that in some documented cases, the identifier in the
++ // last path element (for the entity) itself may be omitted. A path can never
++ // be empty.
++ PathElement []*Key_PathElement `protobuf:"bytes,2,rep,name=path_element" json:"path_element,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Key) Reset() { *m = Key{} }
++func (m *Key) String() string { return proto.CompactTextString(m) }
++func (*Key) ProtoMessage() {}
++
++func (m *Key) GetPartitionId() *PartitionId {
++ if m != nil {
++ return m.PartitionId
++ }
++ return nil
++}
++
++func (m *Key) GetPathElement() []*Key_PathElement {
++ if m != nil {
++ return m.PathElement
++ }
++ return nil
++}
++
++// A (kind, ID/name) pair used to construct a key path.
++//
++// At most one of name or ID may be set.
++// If either is set, the element is complete.
++// If neither is set, the element is incomplete.
++type Key_PathElement struct {
++ // The kind of the entity.
++ // A kind matching regex "__.*__" is reserved/read-only.
++ // A kind must not contain more than 500 characters.
++ // Cannot be "".
++ Kind *string `protobuf:"bytes,1,req,name=kind" json:"kind,omitempty"`
++ // The ID of the entity.
++ // Never equal to zero. Values less than zero are discouraged and will not
++ // be supported in the future.
++ Id *int64 `protobuf:"varint,2,opt,name=id" json:"id,omitempty"`
++ // The name of the entity.
++ // A name matching regex "__.*__" is reserved/read-only.
++ // A name must not be more than 500 characters.
++ // Cannot be "".
++ Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Key_PathElement) Reset() { *m = Key_PathElement{} }
++func (m *Key_PathElement) String() string { return proto.CompactTextString(m) }
++func (*Key_PathElement) ProtoMessage() {}
++
++func (m *Key_PathElement) GetKind() string {
++ if m != nil && m.Kind != nil {
++ return *m.Kind
++ }
++ return ""
++}
++
++func (m *Key_PathElement) GetId() int64 {
++ if m != nil && m.Id != nil {
++ return *m.Id
++ }
++ return 0
++}
++
++func (m *Key_PathElement) GetName() string {
++ if m != nil && m.Name != nil {
++ return *m.Name
++ }
++ return ""
++}
++
++// A message that can hold any of the supported value types and associated
++// metadata.
++//
++// At most one of the <type>Value fields may be set.
++// If none are set the value is "null".
++//
++type Value struct {
++ // A boolean value.
++ BooleanValue *bool `protobuf:"varint,1,opt,name=boolean_value" json:"boolean_value,omitempty"`
++ // An integer value.
++ IntegerValue *int64 `protobuf:"varint,2,opt,name=integer_value" json:"integer_value,omitempty"`
++ // A double value.
++ DoubleValue *float64 `protobuf:"fixed64,3,opt,name=double_value" json:"double_value,omitempty"`
++ // A timestamp value.
++ TimestampMicrosecondsValue *int64 `protobuf:"varint,4,opt,name=timestamp_microseconds_value" json:"timestamp_microseconds_value,omitempty"`
++ // A key value.
++ KeyValue *Key `protobuf:"bytes,5,opt,name=key_value" json:"key_value,omitempty"`
++ // A blob key value.
++ BlobKeyValue *string `protobuf:"bytes,16,opt,name=blob_key_value" json:"blob_key_value,omitempty"`
++ // A UTF-8 encoded string value.
++ StringValue *string `protobuf:"bytes,17,opt,name=string_value" json:"string_value,omitempty"`
++ // A blob value.
++ BlobValue []byte `protobuf:"bytes,18,opt,name=blob_value" json:"blob_value,omitempty"`
++ // An entity value.
++ // May have no key.
++ // May have a key with an incomplete key path.
++ // May have a reserved/read-only key.
++ EntityValue *Entity `protobuf:"bytes,6,opt,name=entity_value" json:"entity_value,omitempty"`
++ // A list value.
++ // Cannot contain another list value.
++ // Cannot also have a meaning and indexing set.
++ ListValue []*Value `protobuf:"bytes,7,rep,name=list_value" json:"list_value,omitempty"`
++ // The <code>meaning</code> field is reserved and should not be used.
++ Meaning *int32 `protobuf:"varint,14,opt,name=meaning" json:"meaning,omitempty"`
++ // If the value should be indexed.
++ //
++ // The <code>indexed</code> property may be set for a
++ // <code>null</code> value.
++ // When <code>indexed</code> is <code>true</code>, <code>stringValue</code>
++ // is limited to 500 characters and the blob value is limited to 500 bytes.
++ // Exception: If meaning is set to 2, string_value is limited to 2038
++ // characters regardless of indexed.
++ // When indexed is true, meaning 15 and 22 are not allowed, and meaning 16
++ // will be ignored on input (and will never be set on output).
++ // Input values by default have <code>indexed</code> set to
++ // <code>true</code>; however, you can explicitly set <code>indexed</code> to
++ // <code>true</code> if you want. (An output value never has
++ // <code>indexed</code> explicitly set to <code>true</code>.) If a value is
++ // itself an entity, it cannot have <code>indexed</code> set to
++ // <code>true</code>.
++ // Exception: An entity value with meaning 9, 20 or 21 may be indexed.
++ Indexed *bool `protobuf:"varint,15,opt,name=indexed,def=1" json:"indexed,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Value) Reset() { *m = Value{} }
++func (m *Value) String() string { return proto.CompactTextString(m) }
++func (*Value) ProtoMessage() {}
++
++const Default_Value_Indexed bool = true
++
++func (m *Value) GetBooleanValue() bool {
++ if m != nil && m.BooleanValue != nil {
++ return *m.BooleanValue
++ }
++ return false
++}
++
++func (m *Value) GetIntegerValue() int64 {
++ if m != nil && m.IntegerValue != nil {
++ return *m.IntegerValue
++ }
++ return 0
++}
++
++func (m *Value) GetDoubleValue() float64 {
++ if m != nil && m.DoubleValue != nil {
++ return *m.DoubleValue
++ }
++ return 0
++}
++
++func (m *Value) GetTimestampMicrosecondsValue() int64 {
++ if m != nil && m.TimestampMicrosecondsValue != nil {
++ return *m.TimestampMicrosecondsValue
++ }
++ return 0
++}
++
++func (m *Value) GetKeyValue() *Key {
++ if m != nil {
++ return m.KeyValue
++ }
++ return nil
++}
++
++func (m *Value) GetBlobKeyValue() string {
++ if m != nil && m.BlobKeyValue != nil {
++ return *m.BlobKeyValue
++ }
++ return ""
++}
++
++func (m *Value) GetStringValue() string {
++ if m != nil && m.StringValue != nil {
++ return *m.StringValue
++ }
++ return ""
++}
++
++func (m *Value) GetBlobValue() []byte {
++ if m != nil {
++ return m.BlobValue
++ }
++ return nil
++}
++
++func (m *Value) GetEntityValue() *Entity {
++ if m != nil {
++ return m.EntityValue
++ }
++ return nil
++}
++
++func (m *Value) GetListValue() []*Value {
++ if m != nil {
++ return m.ListValue
++ }
++ return nil
++}
++
++func (m *Value) GetMeaning() int32 {
++ if m != nil && m.Meaning != nil {
++ return *m.Meaning
++ }
++ return 0
++}
++
++func (m *Value) GetIndexed() bool {
++ if m != nil && m.Indexed != nil {
++ return *m.Indexed
++ }
++ return Default_Value_Indexed
++}
++
++// An entity property.
++type Property struct {
++ // The name of the property.
++ // A property name matching regex "__.*__" is reserved.
++ // A reserved property name is forbidden in certain documented contexts.
++ // The name must not contain more than 500 characters.
++ // Cannot be "".
++ Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
++ // The value(s) of the property.
++ // Each value can have only one value property populated. For example,
++ // you cannot have a values list of <code>{ value: { integerValue: 22,
++ // stringValue: "a" } }</code>, but you can have <code>{ value: { listValue:
++ // [ { integerValue: 22 }, { stringValue: "a" } ] }</code>.
++ Value *Value `protobuf:"bytes,4,req,name=value" json:"value,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Property) Reset() { *m = Property{} }
++func (m *Property) String() string { return proto.CompactTextString(m) }
++func (*Property) ProtoMessage() {}
++
++func (m *Property) GetName() string {
++ if m != nil && m.Name != nil {
++ return *m.Name
++ }
++ return ""
++}
++
++func (m *Property) GetValue() *Value {
++ if m != nil {
++ return m.Value
++ }
++ return nil
++}
++
++// An entity.
++//
++// An entity is limited to 1 megabyte when stored. That <em>roughly</em>
++// corresponds to a limit of 1 megabyte for the serialized form of this
++// message.
++type Entity struct {
++ // The entity's key.
++ //
++ // An entity must have a key, unless otherwise documented (for example,
++ // an entity in <code>Value.entityValue</code> may have no key).
++ // An entity's kind is its key's path's last element's kind,
++ // or null if it has no key.
++ Key *Key `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
++ // The entity's properties.
++ // Each property's name must be unique for its entity.
++ Property []*Property `protobuf:"bytes,2,rep,name=property" json:"property,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Entity) Reset() { *m = Entity{} }
++func (m *Entity) String() string { return proto.CompactTextString(m) }
++func (*Entity) ProtoMessage() {}
++
++func (m *Entity) GetKey() *Key {
++ if m != nil {
++ return m.Key
++ }
++ return nil
++}
++
++func (m *Entity) GetProperty() []*Property {
++ if m != nil {
++ return m.Property
++ }
++ return nil
++}
++
++// The result of fetching an entity from the datastore.
++type EntityResult struct {
++ // The resulting entity.
++ Entity *Entity `protobuf:"bytes,1,req,name=entity" json:"entity,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *EntityResult) Reset() { *m = EntityResult{} }
++func (m *EntityResult) String() string { return proto.CompactTextString(m) }
++func (*EntityResult) ProtoMessage() {}
++
++func (m *EntityResult) GetEntity() *Entity {
++ if m != nil {
++ return m.Entity
++ }
++ return nil
++}
++
++// A query.
++type Query struct {
++ // The projection to return. If not set the entire entity is returned.
++ Projection []*PropertyExpression `protobuf:"bytes,2,rep,name=projection" json:"projection,omitempty"`
++ // The kinds to query (if empty, returns entities from all kinds).
++ Kind []*KindExpression `protobuf:"bytes,3,rep,name=kind" json:"kind,omitempty"`
++ // The filter to apply (optional).
++ Filter *Filter `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"`
++ // The order to apply to the query results (if empty, order is unspecified).
++ Order []*PropertyOrder `protobuf:"bytes,5,rep,name=order" json:"order,omitempty"`
++ // The properties to group by (if empty, no grouping is applied to the
++ // result set).
++ GroupBy []*PropertyReference `protobuf:"bytes,6,rep,name=group_by" json:"group_by,omitempty"`
++ // A starting point for the query results. Optional. Query cursors are
++ // returned in query result batches.
++ StartCursor []byte `protobuf:"bytes,7,opt,name=start_cursor" json:"start_cursor,omitempty"`
++ // An ending point for the query results. Optional. Query cursors are
++ // returned in query result batches.
++ EndCursor []byte `protobuf:"bytes,8,opt,name=end_cursor" json:"end_cursor,omitempty"`
++ // The number of results to skip. Applies before limit, but after all other
++ // constraints (optional, defaults to 0).
++ Offset *int32 `protobuf:"varint,10,opt,name=offset,def=0" json:"offset,omitempty"`
++ // The maximum number of results to return. Applies after all other
++ // constraints. Optional.
++ Limit *int32 `protobuf:"varint,11,opt,name=limit" json:"limit,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Query) Reset() { *m = Query{} }
++func (m *Query) String() string { return proto.CompactTextString(m) }
++func (*Query) ProtoMessage() {}
++
++const Default_Query_Offset int32 = 0
++
++func (m *Query) GetProjection() []*PropertyExpression {
++ if m != nil {
++ return m.Projection
++ }
++ return nil
++}
++
++func (m *Query) GetKind() []*KindExpression {
++ if m != nil {
++ return m.Kind
++ }
++ return nil
++}
++
++func (m *Query) GetFilter() *Filter {
++ if m != nil {
++ return m.Filter
++ }
++ return nil
++}
++
++func (m *Query) GetOrder() []*PropertyOrder {
++ if m != nil {
++ return m.Order
++ }
++ return nil
++}
++
++func (m *Query) GetGroupBy() []*PropertyReference {
++ if m != nil {
++ return m.GroupBy
++ }
++ return nil
++}
++
++func (m *Query) GetStartCursor() []byte {
++ if m != nil {
++ return m.StartCursor
++ }
++ return nil
++}
++
++func (m *Query) GetEndCursor() []byte {
++ if m != nil {
++ return m.EndCursor
++ }
++ return nil
++}
++
++func (m *Query) GetOffset() int32 {
++ if m != nil && m.Offset != nil {
++ return *m.Offset
++ }
++ return Default_Query_Offset
++}
++
++func (m *Query) GetLimit() int32 {
++ if m != nil && m.Limit != nil {
++ return *m.Limit
++ }
++ return 0
++}
++
++// A representation of a kind.
++type KindExpression struct {
++ // The name of the kind.
++ Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *KindExpression) Reset() { *m = KindExpression{} }
++func (m *KindExpression) String() string { return proto.CompactTextString(m) }
++func (*KindExpression) ProtoMessage() {}
++
++func (m *KindExpression) GetName() string {
++ if m != nil && m.Name != nil {
++ return *m.Name
++ }
++ return ""
++}
++
++// A reference to a property relative to the kind expressions.
++// exactly.
++type PropertyReference struct {
++ // The name of the property.
++ Name *string `protobuf:"bytes,2,req,name=name" json:"name,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *PropertyReference) Reset() { *m = PropertyReference{} }
++func (m *PropertyReference) String() string { return proto.CompactTextString(m) }
++func (*PropertyReference) ProtoMessage() {}
++
++func (m *PropertyReference) GetName() string {
++ if m != nil && m.Name != nil {
++ return *m.Name
++ }
++ return ""
++}
++
++// A representation of a property in a projection.
++type PropertyExpression struct {
++ // The property to project.
++ Property *PropertyReference `protobuf:"bytes,1,req,name=property" json:"property,omitempty"`
++ // The aggregation function to apply to the property. Optional.
++ // Can only be used when grouping by at least one property. Must
++ // then be set on all properties in the projection that are not
++ // being grouped by.
++ AggregationFunction *PropertyExpression_AggregationFunction `protobuf:"varint,2,opt,name=aggregation_function,enum=pb.PropertyExpression_AggregationFunction" json:"aggregation_function,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *PropertyExpression) Reset() { *m = PropertyExpression{} }
++func (m *PropertyExpression) String() string { return proto.CompactTextString(m) }
++func (*PropertyExpression) ProtoMessage() {}
++
++func (m *PropertyExpression) GetProperty() *PropertyReference {
++ if m != nil {
++ return m.Property
++ }
++ return nil
++}
++
++func (m *PropertyExpression) GetAggregationFunction() PropertyExpression_AggregationFunction {
++ if m != nil && m.AggregationFunction != nil {
++ return *m.AggregationFunction
++ }
++ return PropertyExpression_FIRST
++}
++
++// The desired order for a specific property.
++type PropertyOrder struct {
++ // The property to order by.
++ Property *PropertyReference `protobuf:"bytes,1,req,name=property" json:"property,omitempty"`
++ // The direction to order by.
++ Direction *PropertyOrder_Direction `protobuf:"varint,2,opt,name=direction,enum=pb.PropertyOrder_Direction,def=1" json:"direction,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *PropertyOrder) Reset() { *m = PropertyOrder{} }
++func (m *PropertyOrder) String() string { return proto.CompactTextString(m) }
++func (*PropertyOrder) ProtoMessage() {}
++
++const Default_PropertyOrder_Direction PropertyOrder_Direction = PropertyOrder_ASCENDING
++
++func (m *PropertyOrder) GetProperty() *PropertyReference {
++ if m != nil {
++ return m.Property
++ }
++ return nil
++}
++
++func (m *PropertyOrder) GetDirection() PropertyOrder_Direction {
++ if m != nil && m.Direction != nil {
++ return *m.Direction
++ }
++ return Default_PropertyOrder_Direction
++}
++
++// A holder for any type of filter. Exactly one field should be specified.
++type Filter struct {
++ // A composite filter.
++ CompositeFilter *CompositeFilter `protobuf:"bytes,1,opt,name=composite_filter" json:"composite_filter,omitempty"`
++ // A filter on a property.
++ PropertyFilter *PropertyFilter `protobuf:"bytes,2,opt,name=property_filter" json:"property_filter,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Filter) Reset() { *m = Filter{} }
++func (m *Filter) String() string { return proto.CompactTextString(m) }
++func (*Filter) ProtoMessage() {}
++
++func (m *Filter) GetCompositeFilter() *CompositeFilter {
++ if m != nil {
++ return m.CompositeFilter
++ }
++ return nil
++}
++
++func (m *Filter) GetPropertyFilter() *PropertyFilter {
++ if m != nil {
++ return m.PropertyFilter
++ }
++ return nil
++}
++
++// A filter that merges the multiple other filters using the given operation.
++type CompositeFilter struct {
++ // The operator for combining multiple filters.
++ Operator *CompositeFilter_Operator `protobuf:"varint,1,req,name=operator,enum=pb.CompositeFilter_Operator" json:"operator,omitempty"`
++ // The list of filters to combine.
++ // Must contain at least one filter.
++ Filter []*Filter `protobuf:"bytes,2,rep,name=filter" json:"filter,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *CompositeFilter) Reset() { *m = CompositeFilter{} }
++func (m *CompositeFilter) String() string { return proto.CompactTextString(m) }
++func (*CompositeFilter) ProtoMessage() {}
++
++func (m *CompositeFilter) GetOperator() CompositeFilter_Operator {
++ if m != nil && m.Operator != nil {
++ return *m.Operator
++ }
++ return CompositeFilter_AND
++}
++
++func (m *CompositeFilter) GetFilter() []*Filter {
++ if m != nil {
++ return m.Filter
++ }
++ return nil
++}
++
++// A filter on a specific property.
++type PropertyFilter struct {
++ // The property to filter by.
++ Property *PropertyReference `protobuf:"bytes,1,req,name=property" json:"property,omitempty"`
++ // The operator to filter by.
++ Operator *PropertyFilter_Operator `protobuf:"varint,2,req,name=operator,enum=pb.PropertyFilter_Operator" json:"operator,omitempty"`
++ // The value to compare the property to.
++ Value *Value `protobuf:"bytes,3,req,name=value" json:"value,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *PropertyFilter) Reset() { *m = PropertyFilter{} }
++func (m *PropertyFilter) String() string { return proto.CompactTextString(m) }
++func (*PropertyFilter) ProtoMessage() {}
++
++func (m *PropertyFilter) GetProperty() *PropertyReference {
++ if m != nil {
++ return m.Property
++ }
++ return nil
++}
++
++func (m *PropertyFilter) GetOperator() PropertyFilter_Operator {
++ if m != nil && m.Operator != nil {
++ return *m.Operator
++ }
++ return PropertyFilter_LESS_THAN
++}
++
++func (m *PropertyFilter) GetValue() *Value {
++ if m != nil {
++ return m.Value
++ }
++ return nil
++}
++
++// A GQL query.
++type GqlQuery struct {
++ QueryString *string `protobuf:"bytes,1,req,name=query_string" json:"query_string,omitempty"`
++ // When false, the query string must not contain a literal.
++ AllowLiteral *bool `protobuf:"varint,2,opt,name=allow_literal,def=0" json:"allow_literal,omitempty"`
++ // A named argument must set field GqlQueryArg.name.
++ // No two named arguments may have the same name.
++ // For each non-reserved named binding site in the query string,
++ // there must be a named argument with that name,
++ // but not necessarily the inverse.
++ NameArg []*GqlQueryArg `protobuf:"bytes,3,rep,name=name_arg" json:"name_arg,omitempty"`
++ // Numbered binding site @1 references the first numbered argument,
++ // effectively using 1-based indexing, rather than the usual 0.
++ // A numbered argument must NOT set field GqlQueryArg.name.
++ // For each binding site numbered i in query_string,
++ // there must be an ith numbered argument.
++ // The inverse must also be true.
++ NumberArg []*GqlQueryArg `protobuf:"bytes,4,rep,name=number_arg" json:"number_arg,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *GqlQuery) Reset() { *m = GqlQuery{} }
++func (m *GqlQuery) String() string { return proto.CompactTextString(m) }
++func (*GqlQuery) ProtoMessage() {}
++
++const Default_GqlQuery_AllowLiteral bool = false
++
++func (m *GqlQuery) GetQueryString() string {
++ if m != nil && m.QueryString != nil {
++ return *m.QueryString
++ }
++ return ""
++}
++
++func (m *GqlQuery) GetAllowLiteral() bool {
++ if m != nil && m.AllowLiteral != nil {
++ return *m.AllowLiteral
++ }
++ return Default_GqlQuery_AllowLiteral
++}
++
++func (m *GqlQuery) GetNameArg() []*GqlQueryArg {
++ if m != nil {
++ return m.NameArg
++ }
++ return nil
++}
++
++func (m *GqlQuery) GetNumberArg() []*GqlQueryArg {
++ if m != nil {
++ return m.NumberArg
++ }
++ return nil
++}
++
++// A binding argument for a GQL query.
++// Exactly one of fields value and cursor must be set.
++type GqlQueryArg struct {
++ // Must match regex "[A-Za-z_$][A-Za-z_$0-9]*".
++ // Must not match regex "__.*__".
++ // Must not be "".
++ Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
++ Value *Value `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
++ Cursor []byte `protobuf:"bytes,3,opt,name=cursor" json:"cursor,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *GqlQueryArg) Reset() { *m = GqlQueryArg{} }
++func (m *GqlQueryArg) String() string { return proto.CompactTextString(m) }
++func (*GqlQueryArg) ProtoMessage() {}
++
++func (m *GqlQueryArg) GetName() string {
++ if m != nil && m.Name != nil {
++ return *m.Name
++ }
++ return ""
++}
++
++func (m *GqlQueryArg) GetValue() *Value {
++ if m != nil {
++ return m.Value
++ }
++ return nil
++}
++
++func (m *GqlQueryArg) GetCursor() []byte {
++ if m != nil {
++ return m.Cursor
++ }
++ return nil
++}
++
++// A batch of results produced by a query.
++type QueryResultBatch struct {
++ // The result type for every entity in entityResults.
++ EntityResultType *EntityResult_ResultType `protobuf:"varint,1,req,name=entity_result_type,enum=pb.EntityResult_ResultType" json:"entity_result_type,omitempty"`
++ // The results for this batch.
++ EntityResult []*EntityResult `protobuf:"bytes,2,rep,name=entity_result" json:"entity_result,omitempty"`
++ // A cursor that points to the position after the last result in the batch.
++ // May be absent.
++ EndCursor []byte `protobuf:"bytes,4,opt,name=end_cursor" json:"end_cursor,omitempty"`
++ // The state of the query after the current batch.
++ MoreResults *QueryResultBatch_MoreResultsType `protobuf:"varint,5,req,name=more_results,enum=pb.QueryResultBatch_MoreResultsType" json:"more_results,omitempty"`
++ // The number of results skipped because of <code>Query.offset</code>.
++ SkippedResults *int32 `protobuf:"varint,6,opt,name=skipped_results" json:"skipped_results,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *QueryResultBatch) Reset() { *m = QueryResultBatch{} }
++func (m *QueryResultBatch) String() string { return proto.CompactTextString(m) }
++func (*QueryResultBatch) ProtoMessage() {}
++
++func (m *QueryResultBatch) GetEntityResultType() EntityResult_ResultType {
++ if m != nil && m.EntityResultType != nil {
++ return *m.EntityResultType
++ }
++ return EntityResult_FULL
++}
++
++func (m *QueryResultBatch) GetEntityResult() []*EntityResult {
++ if m != nil {
++ return m.EntityResult
++ }
++ return nil
++}
++
++func (m *QueryResultBatch) GetEndCursor() []byte {
++ if m != nil {
++ return m.EndCursor
++ }
++ return nil
++}
++
++func (m *QueryResultBatch) GetMoreResults() QueryResultBatch_MoreResultsType {
++ if m != nil && m.MoreResults != nil {
++ return *m.MoreResults
++ }
++ return QueryResultBatch_NOT_FINISHED
++}
++
++func (m *QueryResultBatch) GetSkippedResults() int32 {
++ if m != nil && m.SkippedResults != nil {
++ return *m.SkippedResults
++ }
++ return 0
++}
++
++// A set of changes to apply.
++//
++// No entity in this message may have a reserved property name,
++// not even a property in an entity in a value.
++// No value in this message may have meaning 18,
++// not even a value in an entity in another value.
++//
++// If entities with duplicate keys are present, an arbitrary choice will
++// be made as to which is written.
++type Mutation struct {
++ // Entities to upsert.
++ // Each upserted entity's key must have a complete path and
++ // must not be reserved/read-only.
++ Upsert []*Entity `protobuf:"bytes,1,rep,name=upsert" json:"upsert,omitempty"`
++ // Entities to update.
++ // Each updated entity's key must have a complete path and
++ // must not be reserved/read-only.
++ Update []*Entity `protobuf:"bytes,2,rep,name=update" json:"update,omitempty"`
++ // Entities to insert.
++ // Each inserted entity's key must have a complete path and
++ // must not be reserved/read-only.
++ Insert []*Entity `protobuf:"bytes,3,rep,name=insert" json:"insert,omitempty"`
++ // Insert entities with a newly allocated ID.
++ // Each inserted entity's key must omit the final identifier in its path and
++ // must not be reserved/read-only.
++ InsertAutoId []*Entity `protobuf:"bytes,4,rep,name=insert_auto_id" json:"insert_auto_id,omitempty"`
++ // Keys of entities to delete.
++ // Each key must have a complete key path and must not be reserved/read-only.
++ Delete []*Key `protobuf:"bytes,5,rep,name=delete" json:"delete,omitempty"`
++ // Ignore a user specified read-only period. Optional.
++ Force *bool `protobuf:"varint,6,opt,name=force" json:"force,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *Mutation) Reset() { *m = Mutation{} }
++func (m *Mutation) String() string { return proto.CompactTextString(m) }
++func (*Mutation) ProtoMessage() {}
++
++func (m *Mutation) GetUpsert() []*Entity {
++ if m != nil {
++ return m.Upsert
++ }
++ return nil
++}
++
++func (m *Mutation) GetUpdate() []*Entity {
++ if m != nil {
++ return m.Update
++ }
++ return nil
++}
++
++func (m *Mutation) GetInsert() []*Entity {
++ if m != nil {
++ return m.Insert
++ }
++ return nil
++}
++
++func (m *Mutation) GetInsertAutoId() []*Entity {
++ if m != nil {
++ return m.InsertAutoId
++ }
++ return nil
++}
++
++func (m *Mutation) GetDelete() []*Key {
++ if m != nil {
++ return m.Delete
++ }
++ return nil
++}
++
++func (m *Mutation) GetForce() bool {
++ if m != nil && m.Force != nil {
++ return *m.Force
++ }
++ return false
++}
++
++// The result of applying a mutation.
++type MutationResult struct {
++ // Number of index writes.
++ IndexUpdates *int32 `protobuf:"varint,1,req,name=index_updates" json:"index_updates,omitempty"`
++ // Keys for <code>insertAutoId</code> entities. One per entity from the
++ // request, in the same order.
++ InsertAutoIdKey []*Key `protobuf:"bytes,2,rep,name=insert_auto_id_key" json:"insert_auto_id_key,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *MutationResult) Reset() { *m = MutationResult{} }
++func (m *MutationResult) String() string { return proto.CompactTextString(m) }
++func (*MutationResult) ProtoMessage() {}
++
++func (m *MutationResult) GetIndexUpdates() int32 {
++ if m != nil && m.IndexUpdates != nil {
++ return *m.IndexUpdates
++ }
++ return 0
++}
++
++func (m *MutationResult) GetInsertAutoIdKey() []*Key {
++ if m != nil {
++ return m.InsertAutoIdKey
++ }
++ return nil
++}
++
++// Options shared by read requests.
++type ReadOptions struct {
++ // The read consistency to use.
++ // Cannot be set when transaction is set.
++ // Lookup and ancestor queries default to STRONG, global queries default to
++ // EVENTUAL and cannot be set to STRONG.
++ ReadConsistency *ReadOptions_ReadConsistency `protobuf:"varint,1,opt,name=read_consistency,enum=pb.ReadOptions_ReadConsistency,def=0" json:"read_consistency,omitempty"`
++ // The transaction to use. Optional.
++ Transaction []byte `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *ReadOptions) Reset() { *m = ReadOptions{} }
++func (m *ReadOptions) String() string { return proto.CompactTextString(m) }
++func (*ReadOptions) ProtoMessage() {}
++
++const Default_ReadOptions_ReadConsistency ReadOptions_ReadConsistency = ReadOptions_DEFAULT
++
++func (m *ReadOptions) GetReadConsistency() ReadOptions_ReadConsistency {
++ if m != nil && m.ReadConsistency != nil {
++ return *m.ReadConsistency
++ }
++ return Default_ReadOptions_ReadConsistency
++}
++
++func (m *ReadOptions) GetTransaction() []byte {
++ if m != nil {
++ return m.Transaction
++ }
++ return nil
++}
++
++// The request for Lookup.
++type LookupRequest struct {
++ // Options for this lookup request. Optional.
++ ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options" json:"read_options,omitempty"`
++ // Keys of entities to look up from the datastore.
++ Key []*Key `protobuf:"bytes,3,rep,name=key" json:"key,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *LookupRequest) Reset() { *m = LookupRequest{} }
++func (m *LookupRequest) String() string { return proto.CompactTextString(m) }
++func (*LookupRequest) ProtoMessage() {}
++
++func (m *LookupRequest) GetReadOptions() *ReadOptions {
++ if m != nil {
++ return m.ReadOptions
++ }
++ return nil
++}
++
++func (m *LookupRequest) GetKey() []*Key {
++ if m != nil {
++ return m.Key
++ }
++ return nil
++}
++
++// The response for Lookup.
++type LookupResponse struct {
++ // Entities found as ResultType.FULL entities.
++ Found []*EntityResult `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"`
++ // Entities not found as ResultType.KEY_ONLY entities.
++ Missing []*EntityResult `protobuf:"bytes,2,rep,name=missing" json:"missing,omitempty"`
++ // A list of keys that were not looked up due to resource constraints.
++ Deferred []*Key `protobuf:"bytes,3,rep,name=deferred" json:"deferred,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *LookupResponse) Reset() { *m = LookupResponse{} }
++func (m *LookupResponse) String() string { return proto.CompactTextString(m) }
++func (*LookupResponse) ProtoMessage() {}
++
++func (m *LookupResponse) GetFound() []*EntityResult {
++ if m != nil {
++ return m.Found
++ }
++ return nil
++}
++
++func (m *LookupResponse) GetMissing() []*EntityResult {
++ if m != nil {
++ return m.Missing
++ }
++ return nil
++}
++
++func (m *LookupResponse) GetDeferred() []*Key {
++ if m != nil {
++ return m.Deferred
++ }
++ return nil
++}
++
++// The request for RunQuery.
++type RunQueryRequest struct {
++ // The options for this query.
++ ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options" json:"read_options,omitempty"`
++ // Entities are partitioned into subsets, identified by a dataset (usually
++ // implicitly specified by the project) and namespace ID. Queries are scoped
++ // to a single partition.
++ // This partition ID is normalized with the standard default context
++ // partition ID, but all other partition IDs in RunQueryRequest are
++ // normalized with this partition ID as the context partition ID.
++ PartitionId *PartitionId `protobuf:"bytes,2,opt,name=partition_id" json:"partition_id,omitempty"`
++ // The query to run.
++ // Either this field or field gql_query must be set, but not both.
++ Query *Query `protobuf:"bytes,3,opt,name=query" json:"query,omitempty"`
++ // The GQL query to run.
++ // Either this field or field query must be set, but not both.
++ GqlQuery *GqlQuery `protobuf:"bytes,7,opt,name=gql_query" json:"gql_query,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *RunQueryRequest) Reset() { *m = RunQueryRequest{} }
++func (m *RunQueryRequest) String() string { return proto.CompactTextString(m) }
++func (*RunQueryRequest) ProtoMessage() {}
++
++func (m *RunQueryRequest) GetReadOptions() *ReadOptions {
++ if m != nil {
++ return m.ReadOptions
++ }
++ return nil
++}
++
++func (m *RunQueryRequest) GetPartitionId() *PartitionId {
++ if m != nil {
++ return m.PartitionId
++ }
++ return nil
++}
++
++func (m *RunQueryRequest) GetQuery() *Query {
++ if m != nil {
++ return m.Query
++ }
++ return nil
++}
++
++func (m *RunQueryRequest) GetGqlQuery() *GqlQuery {
++ if m != nil {
++ return m.GqlQuery
++ }
++ return nil
++}
++
++// The response for RunQuery.
++type RunQueryResponse struct {
++ // A batch of query results (always present).
++ Batch *QueryResultBatch `protobuf:"bytes,1,opt,name=batch" json:"batch,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *RunQueryResponse) Reset() { *m = RunQueryResponse{} }
++func (m *RunQueryResponse) String() string { return proto.CompactTextString(m) }
++func (*RunQueryResponse) ProtoMessage() {}
++
++func (m *RunQueryResponse) GetBatch() *QueryResultBatch {
++ if m != nil {
++ return m.Batch
++ }
++ return nil
++}
++
++// The request for BeginTransaction.
++type BeginTransactionRequest struct {
++ // The transaction isolation level.
++ IsolationLevel *BeginTransactionRequest_IsolationLevel `protobuf:"varint,1,opt,name=isolation_level,enum=pb.BeginTransactionRequest_IsolationLevel,def=0" json:"isolation_level,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} }
++func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) }
++func (*BeginTransactionRequest) ProtoMessage() {}
++
++const Default_BeginTransactionRequest_IsolationLevel BeginTransactionRequest_IsolationLevel = BeginTransactionRequest_SNAPSHOT
++
++func (m *BeginTransactionRequest) GetIsolationLevel() BeginTransactionRequest_IsolationLevel {
++ if m != nil && m.IsolationLevel != nil {
++ return *m.IsolationLevel
++ }
++ return Default_BeginTransactionRequest_IsolationLevel
++}
++
++// The response for BeginTransaction.
++type BeginTransactionResponse struct {
++ // The transaction identifier (always present).
++ Transaction []byte `protobuf:"bytes,1,opt,name=transaction" json:"transaction,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionResponse{} }
++func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) }
++func (*BeginTransactionResponse) ProtoMessage() {}
++
++func (m *BeginTransactionResponse) GetTransaction() []byte {
++ if m != nil {
++ return m.Transaction
++ }
++ return nil
++}
++
++// The request for Rollback.
++type RollbackRequest struct {
++ // The transaction identifier, returned by a call to
++ // <code>beginTransaction</code>.
++ Transaction []byte `protobuf:"bytes,1,req,name=transaction" json:"transaction,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *RollbackRequest) Reset() { *m = RollbackRequest{} }
++func (m *RollbackRequest) String() string { return proto.CompactTextString(m) }
++func (*RollbackRequest) ProtoMessage() {}
++
++func (m *RollbackRequest) GetTransaction() []byte {
++ if m != nil {
++ return m.Transaction
++ }
++ return nil
++}
++
++// The response for Rollback.
++type RollbackResponse struct {
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *RollbackResponse) Reset() { *m = RollbackResponse{} }
++func (m *RollbackResponse) String() string { return proto.CompactTextString(m) }
++func (*RollbackResponse) ProtoMessage() {}
++
++// The request for Commit.
++type CommitRequest struct {
++ // The transaction identifier, returned by a call to
++ // <code>beginTransaction</code>. Must be set when mode is TRANSACTIONAL.
++ Transaction []byte `protobuf:"bytes,1,opt,name=transaction" json:"transaction,omitempty"`
++ // The mutation to perform. Optional.
++ Mutation *Mutation `protobuf:"bytes,2,opt,name=mutation" json:"mutation,omitempty"`
++ // The type of commit to perform. Either TRANSACTIONAL or NON_TRANSACTIONAL.
++ Mode *CommitRequest_Mode `protobuf:"varint,5,opt,name=mode,enum=pb.CommitRequest_Mode,def=1" json:"mode,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *CommitRequest) Reset() { *m = CommitRequest{} }
++func (m *CommitRequest) String() string { return proto.CompactTextString(m) }
++func (*CommitRequest) ProtoMessage() {}
++
++const Default_CommitRequest_Mode CommitRequest_Mode = CommitRequest_TRANSACTIONAL
++
++func (m *CommitRequest) GetTransaction() []byte {
++ if m != nil {
++ return m.Transaction
++ }
++ return nil
++}
++
++func (m *CommitRequest) GetMutation() *Mutation {
++ if m != nil {
++ return m.Mutation
++ }
++ return nil
++}
++
++func (m *CommitRequest) GetMode() CommitRequest_Mode {
++ if m != nil && m.Mode != nil {
++ return *m.Mode
++ }
++ return Default_CommitRequest_Mode
++}
++
++// The response for Commit.
++type CommitResponse struct {
++ // The result of performing the mutation (if any).
++ MutationResult *MutationResult `protobuf:"bytes,1,opt,name=mutation_result" json:"mutation_result,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *CommitResponse) Reset() { *m = CommitResponse{} }
++func (m *CommitResponse) String() string { return proto.CompactTextString(m) }
++func (*CommitResponse) ProtoMessage() {}
++
++func (m *CommitResponse) GetMutationResult() *MutationResult {
++ if m != nil {
++ return m.MutationResult
++ }
++ return nil
++}
++
++// The request for AllocateIds.
++type AllocateIdsRequest struct {
++ // A list of keys with incomplete key paths to allocate IDs for.
++ // No key may be reserved/read-only.
++ Key []*Key `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *AllocateIdsRequest) Reset() { *m = AllocateIdsRequest{} }
++func (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) }
++func (*AllocateIdsRequest) ProtoMessage() {}
++
++func (m *AllocateIdsRequest) GetKey() []*Key {
++ if m != nil {
++ return m.Key
++ }
++ return nil
++}
++
++// The response for AllocateIds.
++type AllocateIdsResponse struct {
++ // The keys specified in the request (in the same order), each with
++ // its key path completed with a newly allocated ID.
++ Key []*Key `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"`
++ XXX_unrecognized []byte `json:"-"`
++}
++
++func (m *AllocateIdsResponse) Reset() { *m = AllocateIdsResponse{} }
++func (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) }
++func (*AllocateIdsResponse) ProtoMessage() {}
++
++func (m *AllocateIdsResponse) GetKey() []*Key {
++ if m != nil {
++ return m.Key
++ }
++ return nil
++}
++
++func init() {
++ proto.RegisterEnum("pb.EntityResult_ResultType", EntityResult_ResultType_name, EntityResult_ResultType_value)
++ proto.RegisterEnum("pb.PropertyExpression_AggregationFunction", PropertyExpression_AggregationFunction_name, PropertyExpression_AggregationFunction_value)
++ proto.RegisterEnum("pb.PropertyOrder_Direction", PropertyOrder_Direction_name, PropertyOrder_Direction_value)
++ proto.RegisterEnum("pb.CompositeFilter_Operator", CompositeFilter_Operator_name, CompositeFilter_Operator_value)
++ proto.RegisterEnum("pb.PropertyFilter_Operator", PropertyFilter_Operator_name, PropertyFilter_Operator_value)
++ proto.RegisterEnum("pb.QueryResultBatch_MoreResultsType", QueryResultBatch_MoreResultsType_name, QueryResultBatch_MoreResultsType_value)
++ proto.RegisterEnum("pb.ReadOptions_ReadConsistency", ReadOptions_ReadConsistency_name, ReadOptions_ReadConsistency_value)
++ proto.RegisterEnum("pb.BeginTransactionRequest_IsolationLevel", BeginTransactionRequest_IsolationLevel_name, BeginTransactionRequest_IsolationLevel_value)
++ proto.RegisterEnum("pb.CommitRequest_Mode", CommitRequest_Mode_name, CommitRequest_Mode_value)
++}
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.proto b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.proto
+new file mode 100644
+index 0000000..bb4c199
+--- /dev/null
++++ b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/datastore/datastore_v1.proto
+@@ -0,0 +1,594 @@
++// Copyright 2013 Google Inc. All Rights Reserved.
++//
++// The datastore v1 service proto definitions
++
++syntax = "proto2";
++
++package pb;
++option java_package = "com.google.api.services.datastore";
++
++
++// An identifier for a particular subset of entities.
++//
++// Entities are partitioned into various subsets, each used by different
++// datasets and different namespaces within a dataset and so forth.
++//
++// All input partition IDs are normalized before use.
++// A partition ID is normalized as follows:
++// If the partition ID is unset or is set to an empty partition ID, replace it
++// with the context partition ID.
++// Otherwise, if the partition ID has no dataset ID, assign it the context
++// partition ID's dataset ID.
++// Unless otherwise documented, the context partition ID has the dataset ID set
++// to the context dataset ID and no other partition dimension set.
++//
++// A partition ID is empty if all of its fields are unset.
++//
++// Partition dimension:
++// A dimension may be unset.
++// A dimension's value must never be "".
++// A dimension's value must match [A-Za-z\d\.\-_]{1,100}
++// If the value of any dimension matches regex "__.*__",
++// the partition is reserved/read-only.
++// A reserved/read-only partition ID is forbidden in certain documented contexts.
++//
++// Dataset ID:
++// A dataset id's value must never be "".
++// A dataset id's value must match
++// ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99}
++message PartitionId {
++ // The dataset ID.
++ optional string dataset_id = 3;
++ // The namespace.
++ optional string namespace = 4;
++}
++
++// A unique identifier for an entity.
++// If a key's partition id or any of its path kinds or names are
++// reserved/read-only, the key is reserved/read-only.
++// A reserved/read-only key is forbidden in certain documented contexts.
++message Key {
++ // Entities are partitioned into subsets, currently identified by a dataset
++ // (usually implicitly specified by the project) and namespace ID.
++ // Queries are scoped to a single partition.
++ optional PartitionId partition_id = 1;
++
++ // A (kind, ID/name) pair used to construct a key path.
++ //
++ // At most one of name or ID may be set.
++ // If either is set, the element is complete.
++ // If neither is set, the element is incomplete.
++ message PathElement {
++ // The kind of the entity.
++ // A kind matching regex "__.*__" is reserved/read-only.
++ // A kind must not contain more than 500 characters.
++ // Cannot be "".
++ required string kind = 1;
++ // The ID of the entity.
++ // Never equal to zero. Values less than zero are discouraged and will not
++ // be supported in the future.
++ optional int64 id = 2;
++ // The name of the entity.
++ // A name matching regex "__.*__" is reserved/read-only.
++ // A name must not be more than 500 characters.
++ // Cannot be "".
++ optional string name = 3;
++ }
++
++ // The entity path.
++ // An entity path consists of one or more elements composed of a kind and a
++ // string or numerical identifier, which identify entities. The first
++ // element identifies a <em>root entity</em>, the second element identifies
++ // a <em>child</em> of the root entity, the third element a child of the
++ // second entity, and so forth. The entities identified by all prefixes of
++ // the path are called the element's <em>ancestors</em>.
++ // An entity path is always fully complete: ALL of the entity's ancestors
++ // are required to be in the path along with the entity identifier itself.
++ // The only exception is that in some documented cases, the identifier in the
++ // last path element (for the entity) itself may be omitted. A path can never
++ // be empty.
++ repeated PathElement path_element = 2;
++}
++
++// A message that can hold any of the supported value types and associated
++// metadata.
++//
++// At most one of the <type>Value fields may be set.
++// If none are set the value is "null".
++//
++message Value {
++ // A boolean value.
++ optional bool boolean_value = 1;
++ // An integer value.
++ optional int64 integer_value = 2;
++ // A double value.
++ optional double double_value = 3;
++ // A timestamp value.
++ optional int64 timestamp_microseconds_value = 4;
++ // A key value.
++ optional Key key_value = 5;
++ // A blob key value.
++ optional string blob_key_value = 16;
++ // A UTF-8 encoded string value.
++ optional string string_value = 17;
++ // A blob value.
++ optional bytes blob_value = 18;
++ // An entity value.
++ // May have no key.
++ // May have a key with an incomplete key path.
++ // May have a reserved/read-only key.
++ optional Entity entity_value = 6;
++ // A list value.
++ // Cannot contain another list value.
++ // Cannot also have a meaning and indexing set.
++ repeated Value list_value = 7;
++
++ // The <code>meaning</code> field is reserved and should not be used.
++ optional int32 meaning = 14;
++
++ // If the value should be indexed.
++ //
++ // The <code>indexed</code> property may be set for a
++ // <code>null</code> value.
++ // When <code>indexed</code> is <code>true</code>, <code>stringValue</code>
++ // is limited to 500 characters and the blob value is limited to 500 bytes.
++ // Exception: If meaning is set to 2, string_value is limited to 2038
++ // characters regardless of indexed.
++ // When indexed is true, meaning 15 and 22 are not allowed, and meaning 16
++ // will be ignored on input (and will never be set on output).
++ // Input values by default have <code>indexed</code> set to
++ // <code>true</code>; however, you can explicitly set <code>indexed</code> to
++ // <code>true</code> if you want. (An output value never has
++ // <code>indexed</code> explicitly set to <code>true</code>.) If a value is
++ // itself an entity, it cannot have <code>indexed</code> set to
++ // <code>true</code>.
++ // Exception: An entity value with meaning 9, 20 or 21 may be indexed.
++ optional bool indexed = 15 [default = true];
++}
++
++// An entity property.
++message Property {
++ // The name of the property.
++ // A property name matching regex "__.*__" is reserved.
++ // A reserved property name is forbidden in certain documented contexts.
++ // The name must not contain more than 500 characters.
++ // Cannot be "".
++ required string name = 1;
++
++ // The value(s) of the property.
++ // Each value can have only one value property populated. For example,
++ // you cannot have a values list of <code>{ value: { integerValue: 22,
++ // stringValue: "a" } }</code>, but you can have <code>{ value: { listValue:
++ // [ { integerValue: 22 }, { stringValue: "a" } ] }</code>.
++ required Value value = 4;
++}
++
++// An entity.
++//
++// An entity is limited to 1 megabyte when stored. That <em>roughly</em>
++// corresponds to a limit of 1 megabyte for the serialized form of this
++// message.
++message Entity {
++ // The entity's key.
++ //
++ // An entity must have a key, unless otherwise documented (for example,
++ // an entity in <code>Value.entityValue</code> may have no key).
++ // An entity's kind is its key's path's last element's kind,
++ // or null if it has no key.
++ optional Key key = 1;
++ // The entity's properties.
++ // Each property's name must be unique for its entity.
++ repeated Property property = 2;
++}
++
++// The result of fetching an entity from the datastore.
++message EntityResult {
++ // Specifies what data the 'entity' field contains.
++ // A ResultType is either implied (for example, in LookupResponse.found it
++ // is always FULL) or specified by context (for example, in message
++ // QueryResultBatch, field 'entity_result_type' specifies a ResultType
++ // for all the values in field 'entity_result').
++ enum ResultType {
++ FULL = 1; // The entire entity.
++ PROJECTION = 2; // A projected subset of properties.
++ // The entity may have no key.
++ // A property value may have meaning 18.
++ KEY_ONLY = 3; // Only the key.
++ }
++
++ // The resulting entity.
++ required Entity entity = 1;
++}
++
++// A query.
++message Query {
++ // The projection to return. If not set the entire entity is returned.
++ repeated PropertyExpression projection = 2;
++
++ // The kinds to query (if empty, returns entities from all kinds).
++ repeated KindExpression kind = 3;
++
++ // The filter to apply (optional).
++ optional Filter filter = 4;
++
++ // The order to apply to the query results (if empty, order is unspecified).
++ repeated PropertyOrder order = 5;
++
++ // The properties to group by (if empty, no grouping is applied to the
++ // result set).
++ repeated PropertyReference group_by = 6;
++
++ // A starting point for the query results. Optional. Query cursors are
++ // returned in query result batches.
++ optional bytes /* serialized QueryCursor */ start_cursor = 7;
++
++ // An ending point for the query results. Optional. Query cursors are
++ // returned in query result batches.
++ optional bytes /* serialized QueryCursor */ end_cursor = 8;
++
++ // The number of results to skip. Applies before limit, but after all other
++ // constraints (optional, defaults to 0).
++ optional int32 offset = 10 [default=0];
++
++ // The maximum number of results to return. Applies after all other
++ // constraints. Optional.
++ optional int32 limit = 11;
++}
++
++// A representation of a kind.
++message KindExpression {
++ // The name of the kind.
++ required string name = 1;
++}
++
++// A reference to a property relative to the kind expressions.
++// exactly.
++message PropertyReference {
++ // The name of the property.
++ required string name = 2;
++}
++
++// A representation of a property in a projection.
++message PropertyExpression {
++ enum AggregationFunction {
++ FIRST = 1;
++ }
++ // The property to project.
++ required PropertyReference property = 1;
++ // The aggregation function to apply to the property. Optional.
++ // Can only be used when grouping by at least one property. Must
++ // then be set on all properties in the projection that are not
++ // being grouped by.
++ optional AggregationFunction aggregation_function = 2;
++}
++
++// The desired order for a specific property.
++message PropertyOrder {
++ enum Direction {
++ ASCENDING = 1;
++ DESCENDING = 2;
++ }
++ // The property to order by.
++ required PropertyReference property = 1;
++ // The direction to order by.
++ optional Direction direction = 2 [default=ASCENDING];
++}
++
++// A holder for any type of filter. Exactly one field should be specified.
++message Filter {
++ // A composite filter.
++ optional CompositeFilter composite_filter = 1;
++ // A filter on a property.
++ optional PropertyFilter property_filter = 2;
++}
++
++// A filter that merges the multiple other filters using the given operation.
++message CompositeFilter {
++ enum Operator {
++ AND = 1;
++ }
++
++ // The operator for combining multiple filters.
++ required Operator operator = 1;
++ // The list of filters to combine.
++ // Must contain at least one filter.
++ repeated Filter filter = 2;
++}
++
++// A filter on a specific property.
++message PropertyFilter {
++ enum Operator {
++ LESS_THAN = 1;
++ LESS_THAN_OR_EQUAL = 2;
++ GREATER_THAN = 3;
++ GREATER_THAN_OR_EQUAL = 4;
++ EQUAL = 5;
++
++ HAS_ANCESTOR = 11;
++ }
++
++ // The property to filter by.
++ required PropertyReference property = 1;
++ // The operator to filter by.
++ required Operator operator = 2;
++ // The value to compare the property to.
++ required Value value = 3;
++}
++
++// A GQL query.
++message GqlQuery {
++ required string query_string = 1;
++ // When false, the query string must not contain a literal.
++ optional bool allow_literal = 2 [default = false];
++ // A named argument must set field GqlQueryArg.name.
++ // No two named arguments may have the same name.
++ // For each non-reserved named binding site in the query string,
++ // there must be a named argument with that name,
++ // but not necessarily the inverse.
++ repeated GqlQueryArg name_arg = 3;
++ // Numbered binding site @1 references the first numbered argument,
++ // effectively using 1-based indexing, rather than the usual 0.
++ // A numbered argument must NOT set field GqlQueryArg.name.
++ // For each binding site numbered i in query_string,
++ // there must be an ith numbered argument.
++ // The inverse must also be true.
++ repeated GqlQueryArg number_arg = 4;
++}
++
++// A binding argument for a GQL query.
++// Exactly one of fields value and cursor must be set.
++message GqlQueryArg {
++ // Must match regex "[A-Za-z_$][A-Za-z_$0-9]*".
++ // Must not match regex "__.*__".
++ // Must not be "".
++ optional string name = 1;
++ optional Value value = 2;
++ optional bytes cursor = 3;
++}
++
++// A batch of results produced by a query.
++message QueryResultBatch {
++ // The possible values for the 'more_results' field.
++ enum MoreResultsType {
++ NOT_FINISHED = 1; // There are additional batches to fetch from this query.
++ MORE_RESULTS_AFTER_LIMIT = 2; // The query is finished, but there are more
++ // results after the limit.
++ NO_MORE_RESULTS = 3; // The query has been exhausted.
++ }
++
++ // The result type for every entity in entityResults.
++ required EntityResult.ResultType entity_result_type = 1;
++ // The results for this batch.
++ repeated EntityResult entity_result = 2;
++
++ // A cursor that points to the position after the last result in the batch.
++ // May be absent.
++ optional bytes /* serialized QueryCursor */ end_cursor = 4;
++
++ // The state of the query after the current batch.
++ required MoreResultsType more_results = 5;
++
++ // The number of results skipped because of <code>Query.offset</code>.
++ optional int32 skipped_results = 6;
++}
++
++// A set of changes to apply.
++//
++// No entity in this message may have a reserved property name,
++// not even a property in an entity in a value.
++// No value in this message may have meaning 18,
++// not even a value in an entity in another value.
++//
++// If entities with duplicate keys are present, an arbitrary choice will
++// be made as to which is written.
++message Mutation {
++ // Entities to upsert.
++ // Each upserted entity's key must have a complete path and
++ // must not be reserved/read-only.
++ repeated Entity upsert = 1;
++ // Entities to update.
++ // Each updated entity's key must have a complete path and
++ // must not be reserved/read-only.
++ repeated Entity update = 2;
++ // Entities to insert.
++ // Each inserted entity's key must have a complete path and
++ // must not be reserved/read-only.
++ repeated Entity insert = 3;
++ // Insert entities with a newly allocated ID.
++ // Each inserted entity's key must omit the final identifier in its path and
++ // must not be reserved/read-only.
++ repeated Entity insert_auto_id = 4;
++ // Keys of entities to delete.
++ // Each key must have a complete key path and must not be reserved/read-only.
++ repeated Key delete = 5;
++ // Ignore a user specified read-only period. Optional.
++ optional bool force = 6;
++}
++
++// The result of applying a mutation.
++message MutationResult {
++ // Number of index writes.
++ required int32 index_updates = 1;
++ // Keys for <code>insertAutoId</code> entities. One per entity from the
++ // request, in the same order.
++ repeated Key insert_auto_id_key = 2;
++}
++
++// Options shared by read requests.
++message ReadOptions {
++ enum ReadConsistency {
++ DEFAULT = 0;
++ STRONG = 1;
++ EVENTUAL = 2;
++ }
++
++ // The read consistency to use.
++ // Cannot be set when transaction is set.
++ // Lookup and ancestor queries default to STRONG, global queries default to
++ // EVENTUAL and cannot be set to STRONG.
++ optional ReadConsistency read_consistency = 1 [default=DEFAULT];
++
++ // The transaction to use. Optional.
++ optional bytes /* serialized Transaction */ transaction = 2;
++}
++
++// The request for Lookup.
++message LookupRequest {
++
++ // Options for this lookup request. Optional.
++ optional ReadOptions read_options = 1;
++ // Keys of entities to look up from the datastore.
++ repeated Key key = 3;
++}
++
++// The response for Lookup.
++message LookupResponse {
++
++ // The order of results in these fields is undefined and has no relation to
++ // the order of the keys in the input.
++
++ // Entities found as ResultType.FULL entities.
++ repeated EntityResult found = 1;
++
++ // Entities not found as ResultType.KEY_ONLY entities.
++ repeated EntityResult missing = 2;
++
++ // A list of keys that were not looked up due to resource constraints.
++ repeated Key deferred = 3;
++}
++
++
++// The request for RunQuery.
++message RunQueryRequest {
++
++ // The options for this query.
++ optional ReadOptions read_options = 1;
++
++ // Entities are partitioned into subsets, identified by a dataset (usually
++ // implicitly specified by the project) and namespace ID. Queries are scoped
++ // to a single partition.
++ // This partition ID is normalized with the standard default context
++ // partition ID, but all other partition IDs in RunQueryRequest are
++ // normalized with this partition ID as the context partition ID.
++ optional PartitionId partition_id = 2;
++
++ // The query to run.
++ // Either this field or field gql_query must be set, but not both.
++ optional Query query = 3;
++ // The GQL query to run.
++ // Either this field or field query must be set, but not both.
++ optional GqlQuery gql_query = 7;
++}
++
++// The response for RunQuery.
++message RunQueryResponse {
++
++ // A batch of query results (always present).
++ optional QueryResultBatch batch = 1;
++
++}
++
++// The request for BeginTransaction.
++message BeginTransactionRequest {
++
++ enum IsolationLevel {
++ SNAPSHOT = 0; // Read from a consistent snapshot. Concurrent transactions
++ // conflict if their mutations conflict. For example:
++ // Read(A),Write(B) may not conflict with Read(B),Write(A),
++ // but Read(B),Write(B) does conflict with Read(B),Write(B).
++ SERIALIZABLE = 1; // Read from a consistent snapshot. Concurrent
++ // transactions conflict if they cannot be serialized.
++ // For example Read(A),Write(B) does conflict with
++ // Read(B),Write(A) but Read(A) may not conflict with
++ // Write(A).
++ }
++
++ // The transaction isolation level.
++ optional IsolationLevel isolation_level = 1 [default=SNAPSHOT];
++}
++
++// The response for BeginTransaction.
++message BeginTransactionResponse {
++
++ // The transaction identifier (always present).
++ optional bytes /* serialized Transaction */ transaction = 1;
++}
++
++// The request for Rollback.
++message RollbackRequest {
++
++ // The transaction identifier, returned by a call to
++ // <code>beginTransaction</code>.
++ required bytes /* serialized Transaction */ transaction = 1;
++}
++
++// The response for Rollback.
++message RollbackResponse {
++// Empty
++}
++
++// The request for Commit.
++message CommitRequest {
++
++ enum Mode {
++ TRANSACTIONAL = 1;
++ NON_TRANSACTIONAL = 2;
++ }
++
++ // The transaction identifier, returned by a call to
++ // <code>beginTransaction</code>. Must be set when mode is TRANSACTIONAL.
++ optional bytes /* serialized Transaction */ transaction = 1;
++ // The mutation to perform. Optional.
++ optional Mutation mutation = 2;
++ // The type of commit to perform. Either TRANSACTIONAL or NON_TRANSACTIONAL.
++ optional Mode mode = 5 [default=TRANSACTIONAL];
++}
++
++// The response for Commit.
++message CommitResponse {
++
++ // The result of performing the mutation (if any).
++ optional MutationResult mutation_result = 1;
++}
++
++// The request for AllocateIds.
++message AllocateIdsRequest {
++
++ // A list of keys with incomplete key paths to allocate IDs for.
++ // No key may be reserved/read-only.
++ repeated Key key = 1;
++}
++
++// The response for AllocateIds.
++message AllocateIdsResponse {
++
++ // The keys specified in the request (in the same order), each with
++ // its key path completed with a newly allocated ID.
++ repeated Key key = 1;
++}
++
++// Each rpc normalizes the partition IDs of the keys in its input entities,
++// and always returns entities with keys with normalized partition IDs.
++// (Note that applies to all entities, including entities in values.)
++service DatastoreService {
++ // Look up some entities by key.
++ rpc Lookup(LookupRequest) returns (LookupResponse) {
++ };
++ // Query for entities.
++ rpc RunQuery(RunQueryRequest) returns (RunQueryResponse) {
++ };
++ // Begin a new transaction.
++ rpc BeginTransaction(BeginTransactionRequest) returns (BeginTransactionResponse) {
++ };
++ // Commit a transaction, optionally creating, deleting or modifying some
++ // entities.
++ rpc Commit(CommitRequest) returns (CommitResponse) {
++ };
++ // Roll back a transaction.
++ rpc Rollback(RollbackRequest) returns (RollbackResponse) {
++ };
++ // Allocate IDs for incomplete keys (useful for referencing an entity before
++ // it is inserted).
++ rpc AllocateIds(AllocateIdsRequest) returns (AllocateIdsResponse) {
++ };
++}
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/inteernal/testutil/context.go b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/testutil/context.go
+new file mode 100644
+index 0000000..aafd683
+--- /dev/null
++++ b/Godeps/_workspace/src/google.golang.org/cloud/inteernal/testutil/context.go
+@@ -0,0 +1,57 @@
++// Copyright 2014 Google Inc. All Rights Reserved.
++//
++// 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 testutil contains helper functions for writing tests.
++package testutil
++
++import (
++ "io/ioutil"
++ "log"
++ "net/http"
++ "os"
++
++ "golang.org/x/net/context"
++ "golang.org/x/oauth2"
++ "golang.org/x/oauth2/google"
++ "google.golang.org/cloud"
++)
++
++const (
++ envProjID = "GCLOUD_TESTS_GOLANG_PROJECT_ID"
++ envPrivateKey = "GCLOUD_TESTS_GOLANG_KEY"
++)
++
++func Context(scopes ...string) context.Context {
++ key, projID := os.Getenv(envPrivateKey), os.Getenv(envProjID)
++ if key == "" || projID == "" {
++ log.Fatal("GCLOUD_TESTS_GOLANG_KEY and GCLOUD_TESTS_GOLANG_PROJECT_ID must be set. See CONTRIBUTING.md for details.")
++ }
++ jsonKey, err := ioutil.ReadFile(key)
++ if err != nil {
++ log.Fatalf("Cannot read the JSON key file, err: %v", err)
++ }
++ conf, err := google.JWTConfigFromJSON(jsonKey, scopes...)
++ if err != nil {
++ log.Fatal(err)
++ }
++ return cloud.NewContext(projID, conf.Client(oauth2.NoContext))
++}
++
++func NoAuthContext() context.Context {
++ projID := os.Getenv(envProjID)
++ if projID == "" {
++ log.Fatal("GCLOUD_TESTS_GOLANG_PROJECT_ID must be set. See CONTRIBUTING.md for details.")
++ }
++ return cloud.NewContext(projID, &http.Client{Transport: http.DefaultTransport})
++}
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/internal/cloud.go b/Godeps/_workspace/src/google.golang.org/cloud/internal/cloud.go
+deleted file mode 100644
+index 984323c..0000000
+--- a/Godeps/_workspace/src/google.golang.org/cloud/internal/cloud.go
++++ /dev/null
+@@ -1,128 +0,0 @@
+-// Copyright 2014 Google Inc. All Rights Reserved.
+-//
+-// 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 internal provides support for the cloud packages.
+-//
+-// Users should not import this package directly.
+-package internal
+-
+-import (
+- "fmt"
+- "net/http"
+- "sync"
+-
+- "golang.org/x/net/context"
+-)
+-
+-type contextKey struct{}
+-
+-func WithContext(parent context.Context, projID string, c *http.Client) context.Context {
+- if c == nil {
+- panic("nil *http.Client passed to WithContext")
+- }
+- if projID == "" {
+- panic("empty project ID passed to WithContext")
+- }
+- return context.WithValue(parent, contextKey{}, &cloudContext{
+- ProjectID: projID,
+- HTTPClient: c,
+- })
+-}
+-
+-const userAgent = "gcloud-golang/0.1"
+-
+-type cloudContext struct {
+- ProjectID string
+- HTTPClient *http.Client
+-
+- mu sync.Mutex // guards svc
+- svc map[string]interface{} // e.g. "storage" => *rawStorage.Service
+-}
+-
+-// Service returns the result of the fill function if it's never been
+-// called before for the given name (which is assumed to be an API
+-// service name, like "datastore"). If it has already been cached, the fill
+-// func is not run.
+-// It's safe for concurrent use by multiple goroutines.
+-func Service(ctx context.Context, name string, fill func(*http.Client) interface{}) interface{} {
+- return cc(ctx).service(name, fill)
+-}
+-
+-func (c *cloudContext) service(name string, fill func(*http.Client) interface{}) interface{} {
+- c.mu.Lock()
+- defer c.mu.Unlock()
+-
+- if c.svc == nil {
+- c.svc = make(map[string]interface{})
+- } else if v, ok := c.svc[name]; ok {
+- return v
+- }
+- v := fill(c.HTTPClient)
+- c.svc[name] = v
+- return v
+-}
+-
+-// Transport is an http.RoundTripper that appends
+-// Google Cloud client's user-agent to the original
+-// request's user-agent header.
+-type Transport struct {
+- // Base represents the actual http.RoundTripper
+- // the requests will be delegated to.
+- Base http.RoundTripper
+-}
+-
+-// RoundTrip appends a user-agent to the existing user-agent
+-// header and delegates the request to the base http.RoundTripper.
+-func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) {
+- req = cloneRequest(req)
+- ua := req.Header.Get("User-Agent")
+- if ua == "" {
+- ua = userAgent
+- } else {
+- ua = fmt.Sprintf("%s;%s", ua, userAgent)
+- }
+- req.Header.Set("User-Agent", ua)
+- return t.Base.RoundTrip(req)
+-}
+-
+-// cloneRequest returns a clone of the provided *http.Request.
+-// The clone is a shallow copy of the struct and its Header map.
+-func cloneRequest(r *http.Request) *http.Request {
+- // shallow copy of the struct
+- r2 := new(http.Request)
+- *r2 = *r
+- // deep copy of the Header
+- r2.Header = make(http.Header)
+- for k, s := range r.Header {
+- r2.Header[k] = s
+- }
+- return r2
+-}
+-
+-func ProjID(ctx context.Context) string {
+- return cc(ctx).ProjectID
+-}
+-
+-func HTTPClient(ctx context.Context) *http.Client {
+- return cc(ctx).HTTPClient
+-}
+-
+-// cc returns the internal *cloudContext (cc) state for a context.Context.
+-// It panics if the user did it wrong.
+-func cc(ctx context.Context) *cloudContext {
+- if c, ok := ctx.Value(contextKey{}).(*cloudContext); ok {
+- return c
+- }
+- panic("invalid context.Context type; it should be created with cloud.NewContext")
+-}
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.pb.go b/Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.pb.go
+deleted file mode 100644
+index be903e5..0000000
+--- a/Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.pb.go
++++ /dev/null
+@@ -1,1633 +0,0 @@
+-// Code generated by protoc-gen-go.
+-// source: datastore_v1.proto
+-// DO NOT EDIT!
+-
+-/*
+-Package pb is a generated protocol buffer package.
+-
+-It is generated from these files:
+- datastore_v1.proto
+-
+-It has these top-level messages:
+- PartitionId
+- Key
+- Value
+- Property
+- Entity
+- EntityResult
+- Query
+- KindExpression
+- PropertyReference
+- PropertyExpression
+- PropertyOrder
+- Filter
+- CompositeFilter
+- PropertyFilter
+- GqlQuery
+- GqlQueryArg
+- QueryResultBatch
+- Mutation
+- MutationResult
+- ReadOptions
+- LookupRequest
+- LookupResponse
+- RunQueryRequest
+- RunQueryResponse
+- BeginTransactionRequest
+- BeginTransactionResponse
+- RollbackRequest
+- RollbackResponse
+- CommitRequest
+- CommitResponse
+- AllocateIdsRequest
+- AllocateIdsResponse
+-*/
+-package pb
+-
+-import proto "github.com/golang/protobuf/proto"
+-import math "math"
+-
+-// Reference imports to suppress errors if they are not otherwise used.
+-var _ = proto.Marshal
+-var _ = math.Inf
+-
+-// Specifies what data the 'entity' field contains.
+-// A ResultType is either implied (for example, in LookupResponse.found it
+-// is always FULL) or specified by context (for example, in message
+-// QueryResultBatch, field 'entity_result_type' specifies a ResultType
+-// for all the values in field 'entity_result').
+-type EntityResult_ResultType int32
+-
+-const (
+- EntityResult_FULL EntityResult_ResultType = 1
+- EntityResult_PROJECTION EntityResult_ResultType = 2
+- // The entity may have no key.
+- // A property value may have meaning 18.
+- EntityResult_KEY_ONLY EntityResult_ResultType = 3
+-)
+-
+-var EntityResult_ResultType_name = map[int32]string{
+- 1: "FULL",
+- 2: "PROJECTION",
+- 3: "KEY_ONLY",
+-}
+-var EntityResult_ResultType_value = map[string]int32{
+- "FULL": 1,
+- "PROJECTION": 2,
+- "KEY_ONLY": 3,
+-}
+-
+-func (x EntityResult_ResultType) Enum() *EntityResult_ResultType {
+- p := new(EntityResult_ResultType)
+- *p = x
+- return p
+-}
+-func (x EntityResult_ResultType) String() string {
+- return proto.EnumName(EntityResult_ResultType_name, int32(x))
+-}
+-func (x *EntityResult_ResultType) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(EntityResult_ResultType_value, data, "EntityResult_ResultType")
+- if err != nil {
+- return err
+- }
+- *x = EntityResult_ResultType(value)
+- return nil
+-}
+-
+-type PropertyExpression_AggregationFunction int32
+-
+-const (
+- PropertyExpression_FIRST PropertyExpression_AggregationFunction = 1
+-)
+-
+-var PropertyExpression_AggregationFunction_name = map[int32]string{
+- 1: "FIRST",
+-}
+-var PropertyExpression_AggregationFunction_value = map[string]int32{
+- "FIRST": 1,
+-}
+-
+-func (x PropertyExpression_AggregationFunction) Enum() *PropertyExpression_AggregationFunction {
+- p := new(PropertyExpression_AggregationFunction)
+- *p = x
+- return p
+-}
+-func (x PropertyExpression_AggregationFunction) String() string {
+- return proto.EnumName(PropertyExpression_AggregationFunction_name, int32(x))
+-}
+-func (x *PropertyExpression_AggregationFunction) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(PropertyExpression_AggregationFunction_value, data, "PropertyExpression_AggregationFunction")
+- if err != nil {
+- return err
+- }
+- *x = PropertyExpression_AggregationFunction(value)
+- return nil
+-}
+-
+-type PropertyOrder_Direction int32
+-
+-const (
+- PropertyOrder_ASCENDING PropertyOrder_Direction = 1
+- PropertyOrder_DESCENDING PropertyOrder_Direction = 2
+-)
+-
+-var PropertyOrder_Direction_name = map[int32]string{
+- 1: "ASCENDING",
+- 2: "DESCENDING",
+-}
+-var PropertyOrder_Direction_value = map[string]int32{
+- "ASCENDING": 1,
+- "DESCENDING": 2,
+-}
+-
+-func (x PropertyOrder_Direction) Enum() *PropertyOrder_Direction {
+- p := new(PropertyOrder_Direction)
+- *p = x
+- return p
+-}
+-func (x PropertyOrder_Direction) String() string {
+- return proto.EnumName(PropertyOrder_Direction_name, int32(x))
+-}
+-func (x *PropertyOrder_Direction) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(PropertyOrder_Direction_value, data, "PropertyOrder_Direction")
+- if err != nil {
+- return err
+- }
+- *x = PropertyOrder_Direction(value)
+- return nil
+-}
+-
+-type CompositeFilter_Operator int32
+-
+-const (
+- CompositeFilter_AND CompositeFilter_Operator = 1
+-)
+-
+-var CompositeFilter_Operator_name = map[int32]string{
+- 1: "AND",
+-}
+-var CompositeFilter_Operator_value = map[string]int32{
+- "AND": 1,
+-}
+-
+-func (x CompositeFilter_Operator) Enum() *CompositeFilter_Operator {
+- p := new(CompositeFilter_Operator)
+- *p = x
+- return p
+-}
+-func (x CompositeFilter_Operator) String() string {
+- return proto.EnumName(CompositeFilter_Operator_name, int32(x))
+-}
+-func (x *CompositeFilter_Operator) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(CompositeFilter_Operator_value, data, "CompositeFilter_Operator")
+- if err != nil {
+- return err
+- }
+- *x = CompositeFilter_Operator(value)
+- return nil
+-}
+-
+-type PropertyFilter_Operator int32
+-
+-const (
+- PropertyFilter_LESS_THAN PropertyFilter_Operator = 1
+- PropertyFilter_LESS_THAN_OR_EQUAL PropertyFilter_Operator = 2
+- PropertyFilter_GREATER_THAN PropertyFilter_Operator = 3
+- PropertyFilter_GREATER_THAN_OR_EQUAL PropertyFilter_Operator = 4
+- PropertyFilter_EQUAL PropertyFilter_Operator = 5
+- PropertyFilter_HAS_ANCESTOR PropertyFilter_Operator = 11
+-)
+-
+-var PropertyFilter_Operator_name = map[int32]string{
+- 1: "LESS_THAN",
+- 2: "LESS_THAN_OR_EQUAL",
+- 3: "GREATER_THAN",
+- 4: "GREATER_THAN_OR_EQUAL",
+- 5: "EQUAL",
+- 11: "HAS_ANCESTOR",
+-}
+-var PropertyFilter_Operator_value = map[string]int32{
+- "LESS_THAN": 1,
+- "LESS_THAN_OR_EQUAL": 2,
+- "GREATER_THAN": 3,
+- "GREATER_THAN_OR_EQUAL": 4,
+- "EQUAL": 5,
+- "HAS_ANCESTOR": 11,
+-}
+-
+-func (x PropertyFilter_Operator) Enum() *PropertyFilter_Operator {
+- p := new(PropertyFilter_Operator)
+- *p = x
+- return p
+-}
+-func (x PropertyFilter_Operator) String() string {
+- return proto.EnumName(PropertyFilter_Operator_name, int32(x))
+-}
+-func (x *PropertyFilter_Operator) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(PropertyFilter_Operator_value, data, "PropertyFilter_Operator")
+- if err != nil {
+- return err
+- }
+- *x = PropertyFilter_Operator(value)
+- return nil
+-}
+-
+-// The possible values for the 'more_results' field.
+-type QueryResultBatch_MoreResultsType int32
+-
+-const (
+- QueryResultBatch_NOT_FINISHED QueryResultBatch_MoreResultsType = 1
+- QueryResultBatch_MORE_RESULTS_AFTER_LIMIT QueryResultBatch_MoreResultsType = 2
+- // results after the limit.
+- QueryResultBatch_NO_MORE_RESULTS QueryResultBatch_MoreResultsType = 3
+-)
+-
+-var QueryResultBatch_MoreResultsType_name = map[int32]string{
+- 1: "NOT_FINISHED",
+- 2: "MORE_RESULTS_AFTER_LIMIT",
+- 3: "NO_MORE_RESULTS",
+-}
+-var QueryResultBatch_MoreResultsType_value = map[string]int32{
+- "NOT_FINISHED": 1,
+- "MORE_RESULTS_AFTER_LIMIT": 2,
+- "NO_MORE_RESULTS": 3,
+-}
+-
+-func (x QueryResultBatch_MoreResultsType) Enum() *QueryResultBatch_MoreResultsType {
+- p := new(QueryResultBatch_MoreResultsType)
+- *p = x
+- return p
+-}
+-func (x QueryResultBatch_MoreResultsType) String() string {
+- return proto.EnumName(QueryResultBatch_MoreResultsType_name, int32(x))
+-}
+-func (x *QueryResultBatch_MoreResultsType) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(QueryResultBatch_MoreResultsType_value, data, "QueryResultBatch_MoreResultsType")
+- if err != nil {
+- return err
+- }
+- *x = QueryResultBatch_MoreResultsType(value)
+- return nil
+-}
+-
+-type ReadOptions_ReadConsistency int32
+-
+-const (
+- ReadOptions_DEFAULT ReadOptions_ReadConsistency = 0
+- ReadOptions_STRONG ReadOptions_ReadConsistency = 1
+- ReadOptions_EVENTUAL ReadOptions_ReadConsistency = 2
+-)
+-
+-var ReadOptions_ReadConsistency_name = map[int32]string{
+- 0: "DEFAULT",
+- 1: "STRONG",
+- 2: "EVENTUAL",
+-}
+-var ReadOptions_ReadConsistency_value = map[string]int32{
+- "DEFAULT": 0,
+- "STRONG": 1,
+- "EVENTUAL": 2,
+-}
+-
+-func (x ReadOptions_ReadConsistency) Enum() *ReadOptions_ReadConsistency {
+- p := new(ReadOptions_ReadConsistency)
+- *p = x
+- return p
+-}
+-func (x ReadOptions_ReadConsistency) String() string {
+- return proto.EnumName(ReadOptions_ReadConsistency_name, int32(x))
+-}
+-func (x *ReadOptions_ReadConsistency) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(ReadOptions_ReadConsistency_value, data, "ReadOptions_ReadConsistency")
+- if err != nil {
+- return err
+- }
+- *x = ReadOptions_ReadConsistency(value)
+- return nil
+-}
+-
+-type BeginTransactionRequest_IsolationLevel int32
+-
+-const (
+- BeginTransactionRequest_SNAPSHOT BeginTransactionRequest_IsolationLevel = 0
+- // conflict if their mutations conflict. For example:
+- // Read(A),Write(B) may not conflict with Read(B),Write(A),
+- // but Read(B),Write(B) does conflict with Read(B),Write(B).
+- BeginTransactionRequest_SERIALIZABLE BeginTransactionRequest_IsolationLevel = 1
+-)
+-
+-var BeginTransactionRequest_IsolationLevel_name = map[int32]string{
+- 0: "SNAPSHOT",
+- 1: "SERIALIZABLE",
+-}
+-var BeginTransactionRequest_IsolationLevel_value = map[string]int32{
+- "SNAPSHOT": 0,
+- "SERIALIZABLE": 1,
+-}
+-
+-func (x BeginTransactionRequest_IsolationLevel) Enum() *BeginTransactionRequest_IsolationLevel {
+- p := new(BeginTransactionRequest_IsolationLevel)
+- *p = x
+- return p
+-}
+-func (x BeginTransactionRequest_IsolationLevel) String() string {
+- return proto.EnumName(BeginTransactionRequest_IsolationLevel_name, int32(x))
+-}
+-func (x *BeginTransactionRequest_IsolationLevel) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(BeginTransactionRequest_IsolationLevel_value, data, "BeginTransactionRequest_IsolationLevel")
+- if err != nil {
+- return err
+- }
+- *x = BeginTransactionRequest_IsolationLevel(value)
+- return nil
+-}
+-
+-type CommitRequest_Mode int32
+-
+-const (
+- CommitRequest_TRANSACTIONAL CommitRequest_Mode = 1
+- CommitRequest_NON_TRANSACTIONAL CommitRequest_Mode = 2
+-)
+-
+-var CommitRequest_Mode_name = map[int32]string{
+- 1: "TRANSACTIONAL",
+- 2: "NON_TRANSACTIONAL",
+-}
+-var CommitRequest_Mode_value = map[string]int32{
+- "TRANSACTIONAL": 1,
+- "NON_TRANSACTIONAL": 2,
+-}
+-
+-func (x CommitRequest_Mode) Enum() *CommitRequest_Mode {
+- p := new(CommitRequest_Mode)
+- *p = x
+- return p
+-}
+-func (x CommitRequest_Mode) String() string {
+- return proto.EnumName(CommitRequest_Mode_name, int32(x))
+-}
+-func (x *CommitRequest_Mode) UnmarshalJSON(data []byte) error {
+- value, err := proto.UnmarshalJSONEnum(CommitRequest_Mode_value, data, "CommitRequest_Mode")
+- if err != nil {
+- return err
+- }
+- *x = CommitRequest_Mode(value)
+- return nil
+-}
+-
+-// An identifier for a particular subset of entities.
+-//
+-// Entities are partitioned into various subsets, each used by different
+-// datasets and different namespaces within a dataset and so forth.
+-//
+-// All input partition IDs are normalized before use.
+-// A partition ID is normalized as follows:
+-// If the partition ID is unset or is set to an empty partition ID, replace it
+-// with the context partition ID.
+-// Otherwise, if the partition ID has no dataset ID, assign it the context
+-// partition ID's dataset ID.
+-// Unless otherwise documented, the context partition ID has the dataset ID set
+-// to the context dataset ID and no other partition dimension set.
+-//
+-// A partition ID is empty if all of its fields are unset.
+-//
+-// Partition dimension:
+-// A dimension may be unset.
+-// A dimension's value must never be "".
+-// A dimension's value must match [A-Za-z\d\.\-_]{1,100}
+-// If the value of any dimension matches regex "__.*__",
+-// the partition is reserved/read-only.
+-// A reserved/read-only partition ID is forbidden in certain documented contexts.
+-//
+-// Dataset ID:
+-// A dataset id's value must never be "".
+-// A dataset id's value must match
+-// ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99}
+-type PartitionId struct {
+- // The dataset ID.
+- DatasetId *string `protobuf:"bytes,3,opt,name=dataset_id" json:"dataset_id,omitempty"`
+- // The namespace.
+- Namespace *string `protobuf:"bytes,4,opt,name=namespace" json:"namespace,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *PartitionId) Reset() { *m = PartitionId{} }
+-func (m *PartitionId) String() string { return proto.CompactTextString(m) }
+-func (*PartitionId) ProtoMessage() {}
+-
+-func (m *PartitionId) GetDatasetId() string {
+- if m != nil && m.DatasetId != nil {
+- return *m.DatasetId
+- }
+- return ""
+-}
+-
+-func (m *PartitionId) GetNamespace() string {
+- if m != nil && m.Namespace != nil {
+- return *m.Namespace
+- }
+- return ""
+-}
+-
+-// A unique identifier for an entity.
+-// If a key's partition id or any of its path kinds or names are
+-// reserved/read-only, the key is reserved/read-only.
+-// A reserved/read-only key is forbidden in certain documented contexts.
+-type Key struct {
+- // Entities are partitioned into subsets, currently identified by a dataset
+- // (usually implicitly specified by the project) and namespace ID.
+- // Queries are scoped to a single partition.
+- PartitionId *PartitionId `protobuf:"bytes,1,opt,name=partition_id" json:"partition_id,omitempty"`
+- // The entity path.
+- // An entity path consists of one or more elements composed of a kind and a
+- // string or numerical identifier, which identify entities. The first
+- // element identifies a <em>root entity</em>, the second element identifies
+- // a <em>child</em> of the root entity, the third element a child of the
+- // second entity, and so forth. The entities identified by all prefixes of
+- // the path are called the element's <em>ancestors</em>.
+- // An entity path is always fully complete: ALL of the entity's ancestors
+- // are required to be in the path along with the entity identifier itself.
+- // The only exception is that in some documented cases, the identifier in the
+- // last path element (for the entity) itself may be omitted. A path can never
+- // be empty.
+- PathElement []*Key_PathElement `protobuf:"bytes,2,rep,name=path_element" json:"path_element,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Key) Reset() { *m = Key{} }
+-func (m *Key) String() string { return proto.CompactTextString(m) }
+-func (*Key) ProtoMessage() {}
+-
+-func (m *Key) GetPartitionId() *PartitionId {
+- if m != nil {
+- return m.PartitionId
+- }
+- return nil
+-}
+-
+-func (m *Key) GetPathElement() []*Key_PathElement {
+- if m != nil {
+- return m.PathElement
+- }
+- return nil
+-}
+-
+-// A (kind, ID/name) pair used to construct a key path.
+-//
+-// At most one of name or ID may be set.
+-// If either is set, the element is complete.
+-// If neither is set, the element is incomplete.
+-type Key_PathElement struct {
+- // The kind of the entity.
+- // A kind matching regex "__.*__" is reserved/read-only.
+- // A kind must not contain more than 500 characters.
+- // Cannot be "".
+- Kind *string `protobuf:"bytes,1,req,name=kind" json:"kind,omitempty"`
+- // The ID of the entity.
+- // Never equal to zero. Values less than zero are discouraged and will not
+- // be supported in the future.
+- Id *int64 `protobuf:"varint,2,opt,name=id" json:"id,omitempty"`
+- // The name of the entity.
+- // A name matching regex "__.*__" is reserved/read-only.
+- // A name must not be more than 500 characters.
+- // Cannot be "".
+- Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Key_PathElement) Reset() { *m = Key_PathElement{} }
+-func (m *Key_PathElement) String() string { return proto.CompactTextString(m) }
+-func (*Key_PathElement) ProtoMessage() {}
+-
+-func (m *Key_PathElement) GetKind() string {
+- if m != nil && m.Kind != nil {
+- return *m.Kind
+- }
+- return ""
+-}
+-
+-func (m *Key_PathElement) GetId() int64 {
+- if m != nil && m.Id != nil {
+- return *m.Id
+- }
+- return 0
+-}
+-
+-func (m *Key_PathElement) GetName() string {
+- if m != nil && m.Name != nil {
+- return *m.Name
+- }
+- return ""
+-}
+-
+-// A message that can hold any of the supported value types and associated
+-// metadata.
+-//
+-// At most one of the <type>Value fields may be set.
+-// If none are set the value is "null".
+-//
+-type Value struct {
+- // A boolean value.
+- BooleanValue *bool `protobuf:"varint,1,opt,name=boolean_value" json:"boolean_value,omitempty"`
+- // An integer value.
+- IntegerValue *int64 `protobuf:"varint,2,opt,name=integer_value" json:"integer_value,omitempty"`
+- // A double value.
+- DoubleValue *float64 `protobuf:"fixed64,3,opt,name=double_value" json:"double_value,omitempty"`
+- // A timestamp value.
+- TimestampMicrosecondsValue *int64 `protobuf:"varint,4,opt,name=timestamp_microseconds_value" json:"timestamp_microseconds_value,omitempty"`
+- // A key value.
+- KeyValue *Key `protobuf:"bytes,5,opt,name=key_value" json:"key_value,omitempty"`
+- // A blob key value.
+- BlobKeyValue *string `protobuf:"bytes,16,opt,name=blob_key_value" json:"blob_key_value,omitempty"`
+- // A UTF-8 encoded string value.
+- StringValue *string `protobuf:"bytes,17,opt,name=string_value" json:"string_value,omitempty"`
+- // A blob value.
+- BlobValue []byte `protobuf:"bytes,18,opt,name=blob_value" json:"blob_value,omitempty"`
+- // An entity value.
+- // May have no key.
+- // May have a key with an incomplete key path.
+- // May have a reserved/read-only key.
+- EntityValue *Entity `protobuf:"bytes,6,opt,name=entity_value" json:"entity_value,omitempty"`
+- // A list value.
+- // Cannot contain another list value.
+- // Cannot also have a meaning and indexing set.
+- ListValue []*Value `protobuf:"bytes,7,rep,name=list_value" json:"list_value,omitempty"`
+- // The <code>meaning</code> field is reserved and should not be used.
+- Meaning *int32 `protobuf:"varint,14,opt,name=meaning" json:"meaning,omitempty"`
+- // If the value should be indexed.
+- //
+- // The <code>indexed</code> property may be set for a
+- // <code>null</code> value.
+- // When <code>indexed</code> is <code>true</code>, <code>stringValue</code>
+- // is limited to 500 characters and the blob value is limited to 500 bytes.
+- // Exception: If meaning is set to 2, string_value is limited to 2038
+- // characters regardless of indexed.
+- // When indexed is true, meaning 15 and 22 are not allowed, and meaning 16
+- // will be ignored on input (and will never be set on output).
+- // Input values by default have <code>indexed</code> set to
+- // <code>true</code>; however, you can explicitly set <code>indexed</code> to
+- // <code>true</code> if you want. (An output value never has
+- // <code>indexed</code> explicitly set to <code>true</code>.) If a value is
+- // itself an entity, it cannot have <code>indexed</code> set to
+- // <code>true</code>.
+- // Exception: An entity value with meaning 9, 20 or 21 may be indexed.
+- Indexed *bool `protobuf:"varint,15,opt,name=indexed,def=1" json:"indexed,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Value) Reset() { *m = Value{} }
+-func (m *Value) String() string { return proto.CompactTextString(m) }
+-func (*Value) ProtoMessage() {}
+-
+-const Default_Value_Indexed bool = true
+-
+-func (m *Value) GetBooleanValue() bool {
+- if m != nil && m.BooleanValue != nil {
+- return *m.BooleanValue
+- }
+- return false
+-}
+-
+-func (m *Value) GetIntegerValue() int64 {
+- if m != nil && m.IntegerValue != nil {
+- return *m.IntegerValue
+- }
+- return 0
+-}
+-
+-func (m *Value) GetDoubleValue() float64 {
+- if m != nil && m.DoubleValue != nil {
+- return *m.DoubleValue
+- }
+- return 0
+-}
+-
+-func (m *Value) GetTimestampMicrosecondsValue() int64 {
+- if m != nil && m.TimestampMicrosecondsValue != nil {
+- return *m.TimestampMicrosecondsValue
+- }
+- return 0
+-}
+-
+-func (m *Value) GetKeyValue() *Key {
+- if m != nil {
+- return m.KeyValue
+- }
+- return nil
+-}
+-
+-func (m *Value) GetBlobKeyValue() string {
+- if m != nil && m.BlobKeyValue != nil {
+- return *m.BlobKeyValue
+- }
+- return ""
+-}
+-
+-func (m *Value) GetStringValue() string {
+- if m != nil && m.StringValue != nil {
+- return *m.StringValue
+- }
+- return ""
+-}
+-
+-func (m *Value) GetBlobValue() []byte {
+- if m != nil {
+- return m.BlobValue
+- }
+- return nil
+-}
+-
+-func (m *Value) GetEntityValue() *Entity {
+- if m != nil {
+- return m.EntityValue
+- }
+- return nil
+-}
+-
+-func (m *Value) GetListValue() []*Value {
+- if m != nil {
+- return m.ListValue
+- }
+- return nil
+-}
+-
+-func (m *Value) GetMeaning() int32 {
+- if m != nil && m.Meaning != nil {
+- return *m.Meaning
+- }
+- return 0
+-}
+-
+-func (m *Value) GetIndexed() bool {
+- if m != nil && m.Indexed != nil {
+- return *m.Indexed
+- }
+- return Default_Value_Indexed
+-}
+-
+-// An entity property.
+-type Property struct {
+- // The name of the property.
+- // A property name matching regex "__.*__" is reserved.
+- // A reserved property name is forbidden in certain documented contexts.
+- // The name must not contain more than 500 characters.
+- // Cannot be "".
+- Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
+- // The value(s) of the property.
+- // Each value can have only one value property populated. For example,
+- // you cannot have a values list of <code>{ value: { integerValue: 22,
+- // stringValue: "a" } }</code>, but you can have <code>{ value: { listValue:
+- // [ { integerValue: 22 }, { stringValue: "a" } ] }</code>.
+- Value *Value `protobuf:"bytes,4,req,name=value" json:"value,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Property) Reset() { *m = Property{} }
+-func (m *Property) String() string { return proto.CompactTextString(m) }
+-func (*Property) ProtoMessage() {}
+-
+-func (m *Property) GetName() string {
+- if m != nil && m.Name != nil {
+- return *m.Name
+- }
+- return ""
+-}
+-
+-func (m *Property) GetValue() *Value {
+- if m != nil {
+- return m.Value
+- }
+- return nil
+-}
+-
+-// An entity.
+-//
+-// An entity is limited to 1 megabyte when stored. That <em>roughly</em>
+-// corresponds to a limit of 1 megabyte for the serialized form of this
+-// message.
+-type Entity struct {
+- // The entity's key.
+- //
+- // An entity must have a key, unless otherwise documented (for example,
+- // an entity in <code>Value.entityValue</code> may have no key).
+- // An entity's kind is its key's path's last element's kind,
+- // or null if it has no key.
+- Key *Key `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
+- // The entity's properties.
+- // Each property's name must be unique for its entity.
+- Property []*Property `protobuf:"bytes,2,rep,name=property" json:"property,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Entity) Reset() { *m = Entity{} }
+-func (m *Entity) String() string { return proto.CompactTextString(m) }
+-func (*Entity) ProtoMessage() {}
+-
+-func (m *Entity) GetKey() *Key {
+- if m != nil {
+- return m.Key
+- }
+- return nil
+-}
+-
+-func (m *Entity) GetProperty() []*Property {
+- if m != nil {
+- return m.Property
+- }
+- return nil
+-}
+-
+-// The result of fetching an entity from the datastore.
+-type EntityResult struct {
+- // The resulting entity.
+- Entity *Entity `protobuf:"bytes,1,req,name=entity" json:"entity,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *EntityResult) Reset() { *m = EntityResult{} }
+-func (m *EntityResult) String() string { return proto.CompactTextString(m) }
+-func (*EntityResult) ProtoMessage() {}
+-
+-func (m *EntityResult) GetEntity() *Entity {
+- if m != nil {
+- return m.Entity
+- }
+- return nil
+-}
+-
+-// A query.
+-type Query struct {
+- // The projection to return. If not set the entire entity is returned.
+- Projection []*PropertyExpression `protobuf:"bytes,2,rep,name=projection" json:"projection,omitempty"`
+- // The kinds to query (if empty, returns entities from all kinds).
+- Kind []*KindExpression `protobuf:"bytes,3,rep,name=kind" json:"kind,omitempty"`
+- // The filter to apply (optional).
+- Filter *Filter `protobuf:"bytes,4,opt,name=filter" json:"filter,omitempty"`
+- // The order to apply to the query results (if empty, order is unspecified).
+- Order []*PropertyOrder `protobuf:"bytes,5,rep,name=order" json:"order,omitempty"`
+- // The properties to group by (if empty, no grouping is applied to the
+- // result set).
+- GroupBy []*PropertyReference `protobuf:"bytes,6,rep,name=group_by" json:"group_by,omitempty"`
+- // A starting point for the query results. Optional. Query cursors are
+- // returned in query result batches.
+- StartCursor []byte `protobuf:"bytes,7,opt,name=start_cursor" json:"start_cursor,omitempty"`
+- // An ending point for the query results. Optional. Query cursors are
+- // returned in query result batches.
+- EndCursor []byte `protobuf:"bytes,8,opt,name=end_cursor" json:"end_cursor,omitempty"`
+- // The number of results to skip. Applies before limit, but after all other
+- // constraints (optional, defaults to 0).
+- Offset *int32 `protobuf:"varint,10,opt,name=offset,def=0" json:"offset,omitempty"`
+- // The maximum number of results to return. Applies after all other
+- // constraints. Optional.
+- Limit *int32 `protobuf:"varint,11,opt,name=limit" json:"limit,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Query) Reset() { *m = Query{} }
+-func (m *Query) String() string { return proto.CompactTextString(m) }
+-func (*Query) ProtoMessage() {}
+-
+-const Default_Query_Offset int32 = 0
+-
+-func (m *Query) GetProjection() []*PropertyExpression {
+- if m != nil {
+- return m.Projection
+- }
+- return nil
+-}
+-
+-func (m *Query) GetKind() []*KindExpression {
+- if m != nil {
+- return m.Kind
+- }
+- return nil
+-}
+-
+-func (m *Query) GetFilter() *Filter {
+- if m != nil {
+- return m.Filter
+- }
+- return nil
+-}
+-
+-func (m *Query) GetOrder() []*PropertyOrder {
+- if m != nil {
+- return m.Order
+- }
+- return nil
+-}
+-
+-func (m *Query) GetGroupBy() []*PropertyReference {
+- if m != nil {
+- return m.GroupBy
+- }
+- return nil
+-}
+-
+-func (m *Query) GetStartCursor() []byte {
+- if m != nil {
+- return m.StartCursor
+- }
+- return nil
+-}
+-
+-func (m *Query) GetEndCursor() []byte {
+- if m != nil {
+- return m.EndCursor
+- }
+- return nil
+-}
+-
+-func (m *Query) GetOffset() int32 {
+- if m != nil && m.Offset != nil {
+- return *m.Offset
+- }
+- return Default_Query_Offset
+-}
+-
+-func (m *Query) GetLimit() int32 {
+- if m != nil && m.Limit != nil {
+- return *m.Limit
+- }
+- return 0
+-}
+-
+-// A representation of a kind.
+-type KindExpression struct {
+- // The name of the kind.
+- Name *string `protobuf:"bytes,1,req,name=name" json:"name,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *KindExpression) Reset() { *m = KindExpression{} }
+-func (m *KindExpression) String() string { return proto.CompactTextString(m) }
+-func (*KindExpression) ProtoMessage() {}
+-
+-func (m *KindExpression) GetName() string {
+- if m != nil && m.Name != nil {
+- return *m.Name
+- }
+- return ""
+-}
+-
+-// A reference to a property relative to the kind expressions.
+-// exactly.
+-type PropertyReference struct {
+- // The name of the property.
+- Name *string `protobuf:"bytes,2,req,name=name" json:"name,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *PropertyReference) Reset() { *m = PropertyReference{} }
+-func (m *PropertyReference) String() string { return proto.CompactTextString(m) }
+-func (*PropertyReference) ProtoMessage() {}
+-
+-func (m *PropertyReference) GetName() string {
+- if m != nil && m.Name != nil {
+- return *m.Name
+- }
+- return ""
+-}
+-
+-// A representation of a property in a projection.
+-type PropertyExpression struct {
+- // The property to project.
+- Property *PropertyReference `protobuf:"bytes,1,req,name=property" json:"property,omitempty"`
+- // The aggregation function to apply to the property. Optional.
+- // Can only be used when grouping by at least one property. Must
+- // then be set on all properties in the projection that are not
+- // being grouped by.
+- AggregationFunction *PropertyExpression_AggregationFunction `protobuf:"varint,2,opt,name=aggregation_function,enum=pb.PropertyExpression_AggregationFunction" json:"aggregation_function,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *PropertyExpression) Reset() { *m = PropertyExpression{} }
+-func (m *PropertyExpression) String() string { return proto.CompactTextString(m) }
+-func (*PropertyExpression) ProtoMessage() {}
+-
+-func (m *PropertyExpression) GetProperty() *PropertyReference {
+- if m != nil {
+- return m.Property
+- }
+- return nil
+-}
+-
+-func (m *PropertyExpression) GetAggregationFunction() PropertyExpression_AggregationFunction {
+- if m != nil && m.AggregationFunction != nil {
+- return *m.AggregationFunction
+- }
+- return PropertyExpression_FIRST
+-}
+-
+-// The desired order for a specific property.
+-type PropertyOrder struct {
+- // The property to order by.
+- Property *PropertyReference `protobuf:"bytes,1,req,name=property" json:"property,omitempty"`
+- // The direction to order by.
+- Direction *PropertyOrder_Direction `protobuf:"varint,2,opt,name=direction,enum=pb.PropertyOrder_Direction,def=1" json:"direction,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *PropertyOrder) Reset() { *m = PropertyOrder{} }
+-func (m *PropertyOrder) String() string { return proto.CompactTextString(m) }
+-func (*PropertyOrder) ProtoMessage() {}
+-
+-const Default_PropertyOrder_Direction PropertyOrder_Direction = PropertyOrder_ASCENDING
+-
+-func (m *PropertyOrder) GetProperty() *PropertyReference {
+- if m != nil {
+- return m.Property
+- }
+- return nil
+-}
+-
+-func (m *PropertyOrder) GetDirection() PropertyOrder_Direction {
+- if m != nil && m.Direction != nil {
+- return *m.Direction
+- }
+- return Default_PropertyOrder_Direction
+-}
+-
+-// A holder for any type of filter. Exactly one field should be specified.
+-type Filter struct {
+- // A composite filter.
+- CompositeFilter *CompositeFilter `protobuf:"bytes,1,opt,name=composite_filter" json:"composite_filter,omitempty"`
+- // A filter on a property.
+- PropertyFilter *PropertyFilter `protobuf:"bytes,2,opt,name=property_filter" json:"property_filter,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Filter) Reset() { *m = Filter{} }
+-func (m *Filter) String() string { return proto.CompactTextString(m) }
+-func (*Filter) ProtoMessage() {}
+-
+-func (m *Filter) GetCompositeFilter() *CompositeFilter {
+- if m != nil {
+- return m.CompositeFilter
+- }
+- return nil
+-}
+-
+-func (m *Filter) GetPropertyFilter() *PropertyFilter {
+- if m != nil {
+- return m.PropertyFilter
+- }
+- return nil
+-}
+-
+-// A filter that merges the multiple other filters using the given operation.
+-type CompositeFilter struct {
+- // The operator for combining multiple filters.
+- Operator *CompositeFilter_Operator `protobuf:"varint,1,req,name=operator,enum=pb.CompositeFilter_Operator" json:"operator,omitempty"`
+- // The list of filters to combine.
+- // Must contain at least one filter.
+- Filter []*Filter `protobuf:"bytes,2,rep,name=filter" json:"filter,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *CompositeFilter) Reset() { *m = CompositeFilter{} }
+-func (m *CompositeFilter) String() string { return proto.CompactTextString(m) }
+-func (*CompositeFilter) ProtoMessage() {}
+-
+-func (m *CompositeFilter) GetOperator() CompositeFilter_Operator {
+- if m != nil && m.Operator != nil {
+- return *m.Operator
+- }
+- return CompositeFilter_AND
+-}
+-
+-func (m *CompositeFilter) GetFilter() []*Filter {
+- if m != nil {
+- return m.Filter
+- }
+- return nil
+-}
+-
+-// A filter on a specific property.
+-type PropertyFilter struct {
+- // The property to filter by.
+- Property *PropertyReference `protobuf:"bytes,1,req,name=property" json:"property,omitempty"`
+- // The operator to filter by.
+- Operator *PropertyFilter_Operator `protobuf:"varint,2,req,name=operator,enum=pb.PropertyFilter_Operator" json:"operator,omitempty"`
+- // The value to compare the property to.
+- Value *Value `protobuf:"bytes,3,req,name=value" json:"value,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *PropertyFilter) Reset() { *m = PropertyFilter{} }
+-func (m *PropertyFilter) String() string { return proto.CompactTextString(m) }
+-func (*PropertyFilter) ProtoMessage() {}
+-
+-func (m *PropertyFilter) GetProperty() *PropertyReference {
+- if m != nil {
+- return m.Property
+- }
+- return nil
+-}
+-
+-func (m *PropertyFilter) GetOperator() PropertyFilter_Operator {
+- if m != nil && m.Operator != nil {
+- return *m.Operator
+- }
+- return PropertyFilter_LESS_THAN
+-}
+-
+-func (m *PropertyFilter) GetValue() *Value {
+- if m != nil {
+- return m.Value
+- }
+- return nil
+-}
+-
+-// A GQL query.
+-type GqlQuery struct {
+- QueryString *string `protobuf:"bytes,1,req,name=query_string" json:"query_string,omitempty"`
+- // When false, the query string must not contain a literal.
+- AllowLiteral *bool `protobuf:"varint,2,opt,name=allow_literal,def=0" json:"allow_literal,omitempty"`
+- // A named argument must set field GqlQueryArg.name.
+- // No two named arguments may have the same name.
+- // For each non-reserved named binding site in the query string,
+- // there must be a named argument with that name,
+- // but not necessarily the inverse.
+- NameArg []*GqlQueryArg `protobuf:"bytes,3,rep,name=name_arg" json:"name_arg,omitempty"`
+- // Numbered binding site @1 references the first numbered argument,
+- // effectively using 1-based indexing, rather than the usual 0.
+- // A numbered argument must NOT set field GqlQueryArg.name.
+- // For each binding site numbered i in query_string,
+- // there must be an ith numbered argument.
+- // The inverse must also be true.
+- NumberArg []*GqlQueryArg `protobuf:"bytes,4,rep,name=number_arg" json:"number_arg,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *GqlQuery) Reset() { *m = GqlQuery{} }
+-func (m *GqlQuery) String() string { return proto.CompactTextString(m) }
+-func (*GqlQuery) ProtoMessage() {}
+-
+-const Default_GqlQuery_AllowLiteral bool = false
+-
+-func (m *GqlQuery) GetQueryString() string {
+- if m != nil && m.QueryString != nil {
+- return *m.QueryString
+- }
+- return ""
+-}
+-
+-func (m *GqlQuery) GetAllowLiteral() bool {
+- if m != nil && m.AllowLiteral != nil {
+- return *m.AllowLiteral
+- }
+- return Default_GqlQuery_AllowLiteral
+-}
+-
+-func (m *GqlQuery) GetNameArg() []*GqlQueryArg {
+- if m != nil {
+- return m.NameArg
+- }
+- return nil
+-}
+-
+-func (m *GqlQuery) GetNumberArg() []*GqlQueryArg {
+- if m != nil {
+- return m.NumberArg
+- }
+- return nil
+-}
+-
+-// A binding argument for a GQL query.
+-// Exactly one of fields value and cursor must be set.
+-type GqlQueryArg struct {
+- // Must match regex "[A-Za-z_$][A-Za-z_$0-9]*".
+- // Must not match regex "__.*__".
+- // Must not be "".
+- Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
+- Value *Value `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+- Cursor []byte `protobuf:"bytes,3,opt,name=cursor" json:"cursor,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *GqlQueryArg) Reset() { *m = GqlQueryArg{} }
+-func (m *GqlQueryArg) String() string { return proto.CompactTextString(m) }
+-func (*GqlQueryArg) ProtoMessage() {}
+-
+-func (m *GqlQueryArg) GetName() string {
+- if m != nil && m.Name != nil {
+- return *m.Name
+- }
+- return ""
+-}
+-
+-func (m *GqlQueryArg) GetValue() *Value {
+- if m != nil {
+- return m.Value
+- }
+- return nil
+-}
+-
+-func (m *GqlQueryArg) GetCursor() []byte {
+- if m != nil {
+- return m.Cursor
+- }
+- return nil
+-}
+-
+-// A batch of results produced by a query.
+-type QueryResultBatch struct {
+- // The result type for every entity in entityResults.
+- EntityResultType *EntityResult_ResultType `protobuf:"varint,1,req,name=entity_result_type,enum=pb.EntityResult_ResultType" json:"entity_result_type,omitempty"`
+- // The results for this batch.
+- EntityResult []*EntityResult `protobuf:"bytes,2,rep,name=entity_result" json:"entity_result,omitempty"`
+- // A cursor that points to the position after the last result in the batch.
+- // May be absent.
+- EndCursor []byte `protobuf:"bytes,4,opt,name=end_cursor" json:"end_cursor,omitempty"`
+- // The state of the query after the current batch.
+- MoreResults *QueryResultBatch_MoreResultsType `protobuf:"varint,5,req,name=more_results,enum=pb.QueryResultBatch_MoreResultsType" json:"more_results,omitempty"`
+- // The number of results skipped because of <code>Query.offset</code>.
+- SkippedResults *int32 `protobuf:"varint,6,opt,name=skipped_results" json:"skipped_results,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *QueryResultBatch) Reset() { *m = QueryResultBatch{} }
+-func (m *QueryResultBatch) String() string { return proto.CompactTextString(m) }
+-func (*QueryResultBatch) ProtoMessage() {}
+-
+-func (m *QueryResultBatch) GetEntityResultType() EntityResult_ResultType {
+- if m != nil && m.EntityResultType != nil {
+- return *m.EntityResultType
+- }
+- return EntityResult_FULL
+-}
+-
+-func (m *QueryResultBatch) GetEntityResult() []*EntityResult {
+- if m != nil {
+- return m.EntityResult
+- }
+- return nil
+-}
+-
+-func (m *QueryResultBatch) GetEndCursor() []byte {
+- if m != nil {
+- return m.EndCursor
+- }
+- return nil
+-}
+-
+-func (m *QueryResultBatch) GetMoreResults() QueryResultBatch_MoreResultsType {
+- if m != nil && m.MoreResults != nil {
+- return *m.MoreResults
+- }
+- return QueryResultBatch_NOT_FINISHED
+-}
+-
+-func (m *QueryResultBatch) GetSkippedResults() int32 {
+- if m != nil && m.SkippedResults != nil {
+- return *m.SkippedResults
+- }
+- return 0
+-}
+-
+-// A set of changes to apply.
+-//
+-// No entity in this message may have a reserved property name,
+-// not even a property in an entity in a value.
+-// No value in this message may have meaning 18,
+-// not even a value in an entity in another value.
+-//
+-// If entities with duplicate keys are present, an arbitrary choice will
+-// be made as to which is written.
+-type Mutation struct {
+- // Entities to upsert.
+- // Each upserted entity's key must have a complete path and
+- // must not be reserved/read-only.
+- Upsert []*Entity `protobuf:"bytes,1,rep,name=upsert" json:"upsert,omitempty"`
+- // Entities to update.
+- // Each updated entity's key must have a complete path and
+- // must not be reserved/read-only.
+- Update []*Entity `protobuf:"bytes,2,rep,name=update" json:"update,omitempty"`
+- // Entities to insert.
+- // Each inserted entity's key must have a complete path and
+- // must not be reserved/read-only.
+- Insert []*Entity `protobuf:"bytes,3,rep,name=insert" json:"insert,omitempty"`
+- // Insert entities with a newly allocated ID.
+- // Each inserted entity's key must omit the final identifier in its path and
+- // must not be reserved/read-only.
+- InsertAutoId []*Entity `protobuf:"bytes,4,rep,name=insert_auto_id" json:"insert_auto_id,omitempty"`
+- // Keys of entities to delete.
+- // Each key must have a complete key path and must not be reserved/read-only.
+- Delete []*Key `protobuf:"bytes,5,rep,name=delete" json:"delete,omitempty"`
+- // Ignore a user specified read-only period. Optional.
+- Force *bool `protobuf:"varint,6,opt,name=force" json:"force,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *Mutation) Reset() { *m = Mutation{} }
+-func (m *Mutation) String() string { return proto.CompactTextString(m) }
+-func (*Mutation) ProtoMessage() {}
+-
+-func (m *Mutation) GetUpsert() []*Entity {
+- if m != nil {
+- return m.Upsert
+- }
+- return nil
+-}
+-
+-func (m *Mutation) GetUpdate() []*Entity {
+- if m != nil {
+- return m.Update
+- }
+- return nil
+-}
+-
+-func (m *Mutation) GetInsert() []*Entity {
+- if m != nil {
+- return m.Insert
+- }
+- return nil
+-}
+-
+-func (m *Mutation) GetInsertAutoId() []*Entity {
+- if m != nil {
+- return m.InsertAutoId
+- }
+- return nil
+-}
+-
+-func (m *Mutation) GetDelete() []*Key {
+- if m != nil {
+- return m.Delete
+- }
+- return nil
+-}
+-
+-func (m *Mutation) GetForce() bool {
+- if m != nil && m.Force != nil {
+- return *m.Force
+- }
+- return false
+-}
+-
+-// The result of applying a mutation.
+-type MutationResult struct {
+- // Number of index writes.
+- IndexUpdates *int32 `protobuf:"varint,1,req,name=index_updates" json:"index_updates,omitempty"`
+- // Keys for <code>insertAutoId</code> entities. One per entity from the
+- // request, in the same order.
+- InsertAutoIdKey []*Key `protobuf:"bytes,2,rep,name=insert_auto_id_key" json:"insert_auto_id_key,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *MutationResult) Reset() { *m = MutationResult{} }
+-func (m *MutationResult) String() string { return proto.CompactTextString(m) }
+-func (*MutationResult) ProtoMessage() {}
+-
+-func (m *MutationResult) GetIndexUpdates() int32 {
+- if m != nil && m.IndexUpdates != nil {
+- return *m.IndexUpdates
+- }
+- return 0
+-}
+-
+-func (m *MutationResult) GetInsertAutoIdKey() []*Key {
+- if m != nil {
+- return m.InsertAutoIdKey
+- }
+- return nil
+-}
+-
+-// Options shared by read requests.
+-type ReadOptions struct {
+- // The read consistency to use.
+- // Cannot be set when transaction is set.
+- // Lookup and ancestor queries default to STRONG, global queries default to
+- // EVENTUAL and cannot be set to STRONG.
+- ReadConsistency *ReadOptions_ReadConsistency `protobuf:"varint,1,opt,name=read_consistency,enum=pb.ReadOptions_ReadConsistency,def=0" json:"read_consistency,omitempty"`
+- // The transaction to use. Optional.
+- Transaction []byte `protobuf:"bytes,2,opt,name=transaction" json:"transaction,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *ReadOptions) Reset() { *m = ReadOptions{} }
+-func (m *ReadOptions) String() string { return proto.CompactTextString(m) }
+-func (*ReadOptions) ProtoMessage() {}
+-
+-const Default_ReadOptions_ReadConsistency ReadOptions_ReadConsistency = ReadOptions_DEFAULT
+-
+-func (m *ReadOptions) GetReadConsistency() ReadOptions_ReadConsistency {
+- if m != nil && m.ReadConsistency != nil {
+- return *m.ReadConsistency
+- }
+- return Default_ReadOptions_ReadConsistency
+-}
+-
+-func (m *ReadOptions) GetTransaction() []byte {
+- if m != nil {
+- return m.Transaction
+- }
+- return nil
+-}
+-
+-// The request for Lookup.
+-type LookupRequest struct {
+- // Options for this lookup request. Optional.
+- ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options" json:"read_options,omitempty"`
+- // Keys of entities to look up from the datastore.
+- Key []*Key `protobuf:"bytes,3,rep,name=key" json:"key,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *LookupRequest) Reset() { *m = LookupRequest{} }
+-func (m *LookupRequest) String() string { return proto.CompactTextString(m) }
+-func (*LookupRequest) ProtoMessage() {}
+-
+-func (m *LookupRequest) GetReadOptions() *ReadOptions {
+- if m != nil {
+- return m.ReadOptions
+- }
+- return nil
+-}
+-
+-func (m *LookupRequest) GetKey() []*Key {
+- if m != nil {
+- return m.Key
+- }
+- return nil
+-}
+-
+-// The response for Lookup.
+-type LookupResponse struct {
+- // Entities found as ResultType.FULL entities.
+- Found []*EntityResult `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"`
+- // Entities not found as ResultType.KEY_ONLY entities.
+- Missing []*EntityResult `protobuf:"bytes,2,rep,name=missing" json:"missing,omitempty"`
+- // A list of keys that were not looked up due to resource constraints.
+- Deferred []*Key `protobuf:"bytes,3,rep,name=deferred" json:"deferred,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *LookupResponse) Reset() { *m = LookupResponse{} }
+-func (m *LookupResponse) String() string { return proto.CompactTextString(m) }
+-func (*LookupResponse) ProtoMessage() {}
+-
+-func (m *LookupResponse) GetFound() []*EntityResult {
+- if m != nil {
+- return m.Found
+- }
+- return nil
+-}
+-
+-func (m *LookupResponse) GetMissing() []*EntityResult {
+- if m != nil {
+- return m.Missing
+- }
+- return nil
+-}
+-
+-func (m *LookupResponse) GetDeferred() []*Key {
+- if m != nil {
+- return m.Deferred
+- }
+- return nil
+-}
+-
+-// The request for RunQuery.
+-type RunQueryRequest struct {
+- // The options for this query.
+- ReadOptions *ReadOptions `protobuf:"bytes,1,opt,name=read_options" json:"read_options,omitempty"`
+- // Entities are partitioned into subsets, identified by a dataset (usually
+- // implicitly specified by the project) and namespace ID. Queries are scoped
+- // to a single partition.
+- // This partition ID is normalized with the standard default context
+- // partition ID, but all other partition IDs in RunQueryRequest are
+- // normalized with this partition ID as the context partition ID.
+- PartitionId *PartitionId `protobuf:"bytes,2,opt,name=partition_id" json:"partition_id,omitempty"`
+- // The query to run.
+- // Either this field or field gql_query must be set, but not both.
+- Query *Query `protobuf:"bytes,3,opt,name=query" json:"query,omitempty"`
+- // The GQL query to run.
+- // Either this field or field query must be set, but not both.
+- GqlQuery *GqlQuery `protobuf:"bytes,7,opt,name=gql_query" json:"gql_query,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *RunQueryRequest) Reset() { *m = RunQueryRequest{} }
+-func (m *RunQueryRequest) String() string { return proto.CompactTextString(m) }
+-func (*RunQueryRequest) ProtoMessage() {}
+-
+-func (m *RunQueryRequest) GetReadOptions() *ReadOptions {
+- if m != nil {
+- return m.ReadOptions
+- }
+- return nil
+-}
+-
+-func (m *RunQueryRequest) GetPartitionId() *PartitionId {
+- if m != nil {
+- return m.PartitionId
+- }
+- return nil
+-}
+-
+-func (m *RunQueryRequest) GetQuery() *Query {
+- if m != nil {
+- return m.Query
+- }
+- return nil
+-}
+-
+-func (m *RunQueryRequest) GetGqlQuery() *GqlQuery {
+- if m != nil {
+- return m.GqlQuery
+- }
+- return nil
+-}
+-
+-// The response for RunQuery.
+-type RunQueryResponse struct {
+- // A batch of query results (always present).
+- Batch *QueryResultBatch `protobuf:"bytes,1,opt,name=batch" json:"batch,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *RunQueryResponse) Reset() { *m = RunQueryResponse{} }
+-func (m *RunQueryResponse) String() string { return proto.CompactTextString(m) }
+-func (*RunQueryResponse) ProtoMessage() {}
+-
+-func (m *RunQueryResponse) GetBatch() *QueryResultBatch {
+- if m != nil {
+- return m.Batch
+- }
+- return nil
+-}
+-
+-// The request for BeginTransaction.
+-type BeginTransactionRequest struct {
+- // The transaction isolation level.
+- IsolationLevel *BeginTransactionRequest_IsolationLevel `protobuf:"varint,1,opt,name=isolation_level,enum=pb.BeginTransactionRequest_IsolationLevel,def=0" json:"isolation_level,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *BeginTransactionRequest) Reset() { *m = BeginTransactionRequest{} }
+-func (m *BeginTransactionRequest) String() string { return proto.CompactTextString(m) }
+-func (*BeginTransactionRequest) ProtoMessage() {}
+-
+-const Default_BeginTransactionRequest_IsolationLevel BeginTransactionRequest_IsolationLevel = BeginTransactionRequest_SNAPSHOT
+-
+-func (m *BeginTransactionRequest) GetIsolationLevel() BeginTransactionRequest_IsolationLevel {
+- if m != nil && m.IsolationLevel != nil {
+- return *m.IsolationLevel
+- }
+- return Default_BeginTransactionRequest_IsolationLevel
+-}
+-
+-// The response for BeginTransaction.
+-type BeginTransactionResponse struct {
+- // The transaction identifier (always present).
+- Transaction []byte `protobuf:"bytes,1,opt,name=transaction" json:"transaction,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *BeginTransactionResponse) Reset() { *m = BeginTransactionResponse{} }
+-func (m *BeginTransactionResponse) String() string { return proto.CompactTextString(m) }
+-func (*BeginTransactionResponse) ProtoMessage() {}
+-
+-func (m *BeginTransactionResponse) GetTransaction() []byte {
+- if m != nil {
+- return m.Transaction
+- }
+- return nil
+-}
+-
+-// The request for Rollback.
+-type RollbackRequest struct {
+- // The transaction identifier, returned by a call to
+- // <code>beginTransaction</code>.
+- Transaction []byte `protobuf:"bytes,1,req,name=transaction" json:"transaction,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *RollbackRequest) Reset() { *m = RollbackRequest{} }
+-func (m *RollbackRequest) String() string { return proto.CompactTextString(m) }
+-func (*RollbackRequest) ProtoMessage() {}
+-
+-func (m *RollbackRequest) GetTransaction() []byte {
+- if m != nil {
+- return m.Transaction
+- }
+- return nil
+-}
+-
+-// The response for Rollback.
+-type RollbackResponse struct {
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *RollbackResponse) Reset() { *m = RollbackResponse{} }
+-func (m *RollbackResponse) String() string { return proto.CompactTextString(m) }
+-func (*RollbackResponse) ProtoMessage() {}
+-
+-// The request for Commit.
+-type CommitRequest struct {
+- // The transaction identifier, returned by a call to
+- // <code>beginTransaction</code>. Must be set when mode is TRANSACTIONAL.
+- Transaction []byte `protobuf:"bytes,1,opt,name=transaction" json:"transaction,omitempty"`
+- // The mutation to perform. Optional.
+- Mutation *Mutation `protobuf:"bytes,2,opt,name=mutation" json:"mutation,omitempty"`
+- // The type of commit to perform. Either TRANSACTIONAL or NON_TRANSACTIONAL.
+- Mode *CommitRequest_Mode `protobuf:"varint,5,opt,name=mode,enum=pb.CommitRequest_Mode,def=1" json:"mode,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *CommitRequest) Reset() { *m = CommitRequest{} }
+-func (m *CommitRequest) String() string { return proto.CompactTextString(m) }
+-func (*CommitRequest) ProtoMessage() {}
+-
+-const Default_CommitRequest_Mode CommitRequest_Mode = CommitRequest_TRANSACTIONAL
+-
+-func (m *CommitRequest) GetTransaction() []byte {
+- if m != nil {
+- return m.Transaction
+- }
+- return nil
+-}
+-
+-func (m *CommitRequest) GetMutation() *Mutation {
+- if m != nil {
+- return m.Mutation
+- }
+- return nil
+-}
+-
+-func (m *CommitRequest) GetMode() CommitRequest_Mode {
+- if m != nil && m.Mode != nil {
+- return *m.Mode
+- }
+- return Default_CommitRequest_Mode
+-}
+-
+-// The response for Commit.
+-type CommitResponse struct {
+- // The result of performing the mutation (if any).
+- MutationResult *MutationResult `protobuf:"bytes,1,opt,name=mutation_result" json:"mutation_result,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *CommitResponse) Reset() { *m = CommitResponse{} }
+-func (m *CommitResponse) String() string { return proto.CompactTextString(m) }
+-func (*CommitResponse) ProtoMessage() {}
+-
+-func (m *CommitResponse) GetMutationResult() *MutationResult {
+- if m != nil {
+- return m.MutationResult
+- }
+- return nil
+-}
+-
+-// The request for AllocateIds.
+-type AllocateIdsRequest struct {
+- // A list of keys with incomplete key paths to allocate IDs for.
+- // No key may be reserved/read-only.
+- Key []*Key `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *AllocateIdsRequest) Reset() { *m = AllocateIdsRequest{} }
+-func (m *AllocateIdsRequest) String() string { return proto.CompactTextString(m) }
+-func (*AllocateIdsRequest) ProtoMessage() {}
+-
+-func (m *AllocateIdsRequest) GetKey() []*Key {
+- if m != nil {
+- return m.Key
+- }
+- return nil
+-}
+-
+-// The response for AllocateIds.
+-type AllocateIdsResponse struct {
+- // The keys specified in the request (in the same order), each with
+- // its key path completed with a newly allocated ID.
+- Key []*Key `protobuf:"bytes,1,rep,name=key" json:"key,omitempty"`
+- XXX_unrecognized []byte `json:"-"`
+-}
+-
+-func (m *AllocateIdsResponse) Reset() { *m = AllocateIdsResponse{} }
+-func (m *AllocateIdsResponse) String() string { return proto.CompactTextString(m) }
+-func (*AllocateIdsResponse) ProtoMessage() {}
+-
+-func (m *AllocateIdsResponse) GetKey() []*Key {
+- if m != nil {
+- return m.Key
+- }
+- return nil
+-}
+-
+-func init() {
+- proto.RegisterEnum("pb.EntityResult_ResultType", EntityResult_ResultType_name, EntityResult_ResultType_value)
+- proto.RegisterEnum("pb.PropertyExpression_AggregationFunction", PropertyExpression_AggregationFunction_name, PropertyExpression_AggregationFunction_value)
+- proto.RegisterEnum("pb.PropertyOrder_Direction", PropertyOrder_Direction_name, PropertyOrder_Direction_value)
+- proto.RegisterEnum("pb.CompositeFilter_Operator", CompositeFilter_Operator_name, CompositeFilter_Operator_value)
+- proto.RegisterEnum("pb.PropertyFilter_Operator", PropertyFilter_Operator_name, PropertyFilter_Operator_value)
+- proto.RegisterEnum("pb.QueryResultBatch_MoreResultsType", QueryResultBatch_MoreResultsType_name, QueryResultBatch_MoreResultsType_value)
+- proto.RegisterEnum("pb.ReadOptions_ReadConsistency", ReadOptions_ReadConsistency_name, ReadOptions_ReadConsistency_value)
+- proto.RegisterEnum("pb.BeginTransactionRequest_IsolationLevel", BeginTransactionRequest_IsolationLevel_name, BeginTransactionRequest_IsolationLevel_value)
+- proto.RegisterEnum("pb.CommitRequest_Mode", CommitRequest_Mode_name, CommitRequest_Mode_value)
+-}
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.proto b/Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.proto
+deleted file mode 100644
+index bb4c199..0000000
+--- a/Godeps/_workspace/src/google.golang.org/cloud/internal/datastore/datastore_v1.proto
++++ /dev/null
+@@ -1,594 +0,0 @@
+-// Copyright 2013 Google Inc. All Rights Reserved.
+-//
+-// The datastore v1 service proto definitions
+-
+-syntax = "proto2";
+-
+-package pb;
+-option java_package = "com.google.api.services.datastore";
+-
+-
+-// An identifier for a particular subset of entities.
+-//
+-// Entities are partitioned into various subsets, each used by different
+-// datasets and different namespaces within a dataset and so forth.
+-//
+-// All input partition IDs are normalized before use.
+-// A partition ID is normalized as follows:
+-// If the partition ID is unset or is set to an empty partition ID, replace it
+-// with the context partition ID.
+-// Otherwise, if the partition ID has no dataset ID, assign it the context
+-// partition ID's dataset ID.
+-// Unless otherwise documented, the context partition ID has the dataset ID set
+-// to the context dataset ID and no other partition dimension set.
+-//
+-// A partition ID is empty if all of its fields are unset.
+-//
+-// Partition dimension:
+-// A dimension may be unset.
+-// A dimension's value must never be "".
+-// A dimension's value must match [A-Za-z\d\.\-_]{1,100}
+-// If the value of any dimension matches regex "__.*__",
+-// the partition is reserved/read-only.
+-// A reserved/read-only partition ID is forbidden in certain documented contexts.
+-//
+-// Dataset ID:
+-// A dataset id's value must never be "".
+-// A dataset id's value must match
+-// ([a-z\d\-]{1,100}~)?([a-z\d][a-z\d\-\.]{0,99}:)?([a-z\d][a-z\d\-]{0,99}
+-message PartitionId {
+- // The dataset ID.
+- optional string dataset_id = 3;
+- // The namespace.
+- optional string namespace = 4;
+-}
+-
+-// A unique identifier for an entity.
+-// If a key's partition id or any of its path kinds or names are
+-// reserved/read-only, the key is reserved/read-only.
+-// A reserved/read-only key is forbidden in certain documented contexts.
+-message Key {
+- // Entities are partitioned into subsets, currently identified by a dataset
+- // (usually implicitly specified by the project) and namespace ID.
+- // Queries are scoped to a single partition.
+- optional PartitionId partition_id = 1;
+-
+- // A (kind, ID/name) pair used to construct a key path.
+- //
+- // At most one of name or ID may be set.
+- // If either is set, the element is complete.
+- // If neither is set, the element is incomplete.
+- message PathElement {
+- // The kind of the entity.
+- // A kind matching regex "__.*__" is reserved/read-only.
+- // A kind must not contain more than 500 characters.
+- // Cannot be "".
+- required string kind = 1;
+- // The ID of the entity.
+- // Never equal to zero. Values less than zero are discouraged and will not
+- // be supported in the future.
+- optional int64 id = 2;
+- // The name of the entity.
+- // A name matching regex "__.*__" is reserved/read-only.
+- // A name must not be more than 500 characters.
+- // Cannot be "".
+- optional string name = 3;
+- }
+-
+- // The entity path.
+- // An entity path consists of one or more elements composed of a kind and a
+- // string or numerical identifier, which identify entities. The first
+- // element identifies a <em>root entity</em>, the second element identifies
+- // a <em>child</em> of the root entity, the third element a child of the
+- // second entity, and so forth. The entities identified by all prefixes of
+- // the path are called the element's <em>ancestors</em>.
+- // An entity path is always fully complete: ALL of the entity's ancestors
+- // are required to be in the path along with the entity identifier itself.
+- // The only exception is that in some documented cases, the identifier in the
+- // last path element (for the entity) itself may be omitted. A path can never
+- // be empty.
+- repeated PathElement path_element = 2;
+-}
+-
+-// A message that can hold any of the supported value types and associated
+-// metadata.
+-//
+-// At most one of the <type>Value fields may be set.
+-// If none are set the value is "null".
+-//
+-message Value {
+- // A boolean value.
+- optional bool boolean_value = 1;
+- // An integer value.
+- optional int64 integer_value = 2;
+- // A double value.
+- optional double double_value = 3;
+- // A timestamp value.
+- optional int64 timestamp_microseconds_value = 4;
+- // A key value.
+- optional Key key_value = 5;
+- // A blob key value.
+- optional string blob_key_value = 16;
+- // A UTF-8 encoded string value.
+- optional string string_value = 17;
+- // A blob value.
+- optional bytes blob_value = 18;
+- // An entity value.
+- // May have no key.
+- // May have a key with an incomplete key path.
+- // May have a reserved/read-only key.
+- optional Entity entity_value = 6;
+- // A list value.
+- // Cannot contain another list value.
+- // Cannot also have a meaning and indexing set.
+- repeated Value list_value = 7;
+-
+- // The <code>meaning</code> field is reserved and should not be used.
+- optional int32 meaning = 14;
+-
+- // If the value should be indexed.
+- //
+- // The <code>indexed</code> property may be set for a
+- // <code>null</code> value.
+- // When <code>indexed</code> is <code>true</code>, <code>stringValue</code>
+- // is limited to 500 characters and the blob value is limited to 500 bytes.
+- // Exception: If meaning is set to 2, string_value is limited to 2038
+- // characters regardless of indexed.
+- // When indexed is true, meaning 15 and 22 are not allowed, and meaning 16
+- // will be ignored on input (and will never be set on output).
+- // Input values by default have <code>indexed</code> set to
+- // <code>true</code>; however, you can explicitly set <code>indexed</code> to
+- // <code>true</code> if you want. (An output value never has
+- // <code>indexed</code> explicitly set to <code>true</code>.) If a value is
+- // itself an entity, it cannot have <code>indexed</code> set to
+- // <code>true</code>.
+- // Exception: An entity value with meaning 9, 20 or 21 may be indexed.
+- optional bool indexed = 15 [default = true];
+-}
+-
+-// An entity property.
+-message Property {
+- // The name of the property.
+- // A property name matching regex "__.*__" is reserved.
+- // A reserved property name is forbidden in certain documented contexts.
+- // The name must not contain more than 500 characters.
+- // Cannot be "".
+- required string name = 1;
+-
+- // The value(s) of the property.
+- // Each value can have only one value property populated. For example,
+- // you cannot have a values list of <code>{ value: { integerValue: 22,
+- // stringValue: "a" } }</code>, but you can have <code>{ value: { listValue:
+- // [ { integerValue: 22 }, { stringValue: "a" } ] }</code>.
+- required Value value = 4;
+-}
+-
+-// An entity.
+-//
+-// An entity is limited to 1 megabyte when stored. That <em>roughly</em>
+-// corresponds to a limit of 1 megabyte for the serialized form of this
+-// message.
+-message Entity {
+- // The entity's key.
+- //
+- // An entity must have a key, unless otherwise documented (for example,
+- // an entity in <code>Value.entityValue</code> may have no key).
+- // An entity's kind is its key's path's last element's kind,
+- // or null if it has no key.
+- optional Key key = 1;
+- // The entity's properties.
+- // Each property's name must be unique for its entity.
+- repeated Property property = 2;
+-}
+-
+-// The result of fetching an entity from the datastore.
+-message EntityResult {
+- // Specifies what data the 'entity' field contains.
+- // A ResultType is either implied (for example, in LookupResponse.found it
+- // is always FULL) or specified by context (for example, in message
+- // QueryResultBatch, field 'entity_result_type' specifies a ResultType
+- // for all the values in field 'entity_result').
+- enum ResultType {
+- FULL = 1; // The entire entity.
+- PROJECTION = 2; // A projected subset of properties.
+- // The entity may have no key.
+- // A property value may have meaning 18.
+- KEY_ONLY = 3; // Only the key.
+- }
+-
+- // The resulting entity.
+- required Entity entity = 1;
+-}
+-
+-// A query.
+-message Query {
+- // The projection to return. If not set the entire entity is returned.
+- repeated PropertyExpression projection = 2;
+-
+- // The kinds to query (if empty, returns entities from all kinds).
+- repeated KindExpression kind = 3;
+-
+- // The filter to apply (optional).
+- optional Filter filter = 4;
+-
+- // The order to apply to the query results (if empty, order is unspecified).
+- repeated PropertyOrder order = 5;
+-
+- // The properties to group by (if empty, no grouping is applied to the
+- // result set).
+- repeated PropertyReference group_by = 6;
+-
+- // A starting point for the query results. Optional. Query cursors are
+- // returned in query result batches.
+- optional bytes /* serialized QueryCursor */ start_cursor = 7;
+-
+- // An ending point for the query results. Optional. Query cursors are
+- // returned in query result batches.
+- optional bytes /* serialized QueryCursor */ end_cursor = 8;
+-
+- // The number of results to skip. Applies before limit, but after all other
+- // constraints (optional, defaults to 0).
+- optional int32 offset = 10 [default=0];
+-
+- // The maximum number of results to return. Applies after all other
+- // constraints. Optional.
+- optional int32 limit = 11;
+-}
+-
+-// A representation of a kind.
+-message KindExpression {
+- // The name of the kind.
+- required string name = 1;
+-}
+-
+-// A reference to a property relative to the kind expressions.
+-// exactly.
+-message PropertyReference {
+- // The name of the property.
+- required string name = 2;
+-}
+-
+-// A representation of a property in a projection.
+-message PropertyExpression {
+- enum AggregationFunction {
+- FIRST = 1;
+- }
+- // The property to project.
+- required PropertyReference property = 1;
+- // The aggregation function to apply to the property. Optional.
+- // Can only be used when grouping by at least one property. Must
+- // then be set on all properties in the projection that are not
+- // being grouped by.
+- optional AggregationFunction aggregation_function = 2;
+-}
+-
+-// The desired order for a specific property.
+-message PropertyOrder {
+- enum Direction {
+- ASCENDING = 1;
+- DESCENDING = 2;
+- }
+- // The property to order by.
+- required PropertyReference property = 1;
+- // The direction to order by.
+- optional Direction direction = 2 [default=ASCENDING];
+-}
+-
+-// A holder for any type of filter. Exactly one field should be specified.
+-message Filter {
+- // A composite filter.
+- optional CompositeFilter composite_filter = 1;
+- // A filter on a property.
+- optional PropertyFilter property_filter = 2;
+-}
+-
+-// A filter that merges the multiple other filters using the given operation.
+-message CompositeFilter {
+- enum Operator {
+- AND = 1;
+- }
+-
+- // The operator for combining multiple filters.
+- required Operator operator = 1;
+- // The list of filters to combine.
+- // Must contain at least one filter.
+- repeated Filter filter = 2;
+-}
+-
+-// A filter on a specific property.
+-message PropertyFilter {
+- enum Operator {
+- LESS_THAN = 1;
+- LESS_THAN_OR_EQUAL = 2;
+- GREATER_THAN = 3;
+- GREATER_THAN_OR_EQUAL = 4;
+- EQUAL = 5;
+-
+- HAS_ANCESTOR = 11;
+- }
+-
+- // The property to filter by.
+- required PropertyReference property = 1;
+- // The operator to filter by.
+- required Operator operator = 2;
+- // The value to compare the property to.
+- required Value value = 3;
+-}
+-
+-// A GQL query.
+-message GqlQuery {
+- required string query_string = 1;
+- // When false, the query string must not contain a literal.
+- optional bool allow_literal = 2 [default = false];
+- // A named argument must set field GqlQueryArg.name.
+- // No two named arguments may have the same name.
+- // For each non-reserved named binding site in the query string,
+- // there must be a named argument with that name,
+- // but not necessarily the inverse.
+- repeated GqlQueryArg name_arg = 3;
+- // Numbered binding site @1 references the first numbered argument,
+- // effectively using 1-based indexing, rather than the usual 0.
+- // A numbered argument must NOT set field GqlQueryArg.name.
+- // For each binding site numbered i in query_string,
+- // there must be an ith numbered argument.
+- // The inverse must also be true.
+- repeated GqlQueryArg number_arg = 4;
+-}
+-
+-// A binding argument for a GQL query.
+-// Exactly one of fields value and cursor must be set.
+-message GqlQueryArg {
+- // Must match regex "[A-Za-z_$][A-Za-z_$0-9]*".
+- // Must not match regex "__.*__".
+- // Must not be "".
+- optional string name = 1;
+- optional Value value = 2;
+- optional bytes cursor = 3;
+-}
+-
+-// A batch of results produced by a query.
+-message QueryResultBatch {
+- // The possible values for the 'more_results' field.
+- enum MoreResultsType {
+- NOT_FINISHED = 1; // There are additional batches to fetch from this query.
+- MORE_RESULTS_AFTER_LIMIT = 2; // The query is finished, but there are more
+- // results after the limit.
+- NO_MORE_RESULTS = 3; // The query has been exhausted.
+- }
+-
+- // The result type for every entity in entityResults.
+- required EntityResult.ResultType entity_result_type = 1;
+- // The results for this batch.
+- repeated EntityResult entity_result = 2;
+-
+- // A cursor that points to the position after the last result in the batch.
+- // May be absent.
+- optional bytes /* serialized QueryCursor */ end_cursor = 4;
+-
+- // The state of the query after the current batch.
+- required MoreResultsType more_results = 5;
+-
+- // The number of results skipped because of <code>Query.offset</code>.
+- optional int32 skipped_results = 6;
+-}
+-
+-// A set of changes to apply.
+-//
+-// No entity in this message may have a reserved property name,
+-// not even a property in an entity in a value.
+-// No value in this message may have meaning 18,
+-// not even a value in an entity in another value.
+-//
+-// If entities with duplicate keys are present, an arbitrary choice will
+-// be made as to which is written.
+-message Mutation {
+- // Entities to upsert.
+- // Each upserted entity's key must have a complete path and
+- // must not be reserved/read-only.
+- repeated Entity upsert = 1;
+- // Entities to update.
+- // Each updated entity's key must have a complete path and
+- // must not be reserved/read-only.
+- repeated Entity update = 2;
+- // Entities to insert.
+- // Each inserted entity's key must have a complete path and
+- // must not be reserved/read-only.
+- repeated Entity insert = 3;
+- // Insert entities with a newly allocated ID.
+- // Each inserted entity's key must omit the final identifier in its path and
+- // must not be reserved/read-only.
+- repeated Entity insert_auto_id = 4;
+- // Keys of entities to delete.
+- // Each key must have a complete key path and must not be reserved/read-only.
+- repeated Key delete = 5;
+- // Ignore a user specified read-only period. Optional.
+- optional bool force = 6;
+-}
+-
+-// The result of applying a mutation.
+-message MutationResult {
+- // Number of index writes.
+- required int32 index_updates = 1;
+- // Keys for <code>insertAutoId</code> entities. One per entity from the
+- // request, in the same order.
+- repeated Key insert_auto_id_key = 2;
+-}
+-
+-// Options shared by read requests.
+-message ReadOptions {
+- enum ReadConsistency {
+- DEFAULT = 0;
+- STRONG = 1;
+- EVENTUAL = 2;
+- }
+-
+- // The read consistency to use.
+- // Cannot be set when transaction is set.
+- // Lookup and ancestor queries default to STRONG, global queries default to
+- // EVENTUAL and cannot be set to STRONG.
+- optional ReadConsistency read_consistency = 1 [default=DEFAULT];
+-
+- // The transaction to use. Optional.
+- optional bytes /* serialized Transaction */ transaction = 2;
+-}
+-
+-// The request for Lookup.
+-message LookupRequest {
+-
+- // Options for this lookup request. Optional.
+- optional ReadOptions read_options = 1;
+- // Keys of entities to look up from the datastore.
+- repeated Key key = 3;
+-}
+-
+-// The response for Lookup.
+-message LookupResponse {
+-
+- // The order of results in these fields is undefined and has no relation to
+- // the order of the keys in the input.
+-
+- // Entities found as ResultType.FULL entities.
+- repeated EntityResult found = 1;
+-
+- // Entities not found as ResultType.KEY_ONLY entities.
+- repeated EntityResult missing = 2;
+-
+- // A list of keys that were not looked up due to resource constraints.
+- repeated Key deferred = 3;
+-}
+-
+-
+-// The request for RunQuery.
+-message RunQueryRequest {
+-
+- // The options for this query.
+- optional ReadOptions read_options = 1;
+-
+- // Entities are partitioned into subsets, identified by a dataset (usually
+- // implicitly specified by the project) and namespace ID. Queries are scoped
+- // to a single partition.
+- // This partition ID is normalized with the standard default context
+- // partition ID, but all other partition IDs in RunQueryRequest are
+- // normalized with this partition ID as the context partition ID.
+- optional PartitionId partition_id = 2;
+-
+- // The query to run.
+- // Either this field or field gql_query must be set, but not both.
+- optional Query query = 3;
+- // The GQL query to run.
+- // Either this field or field query must be set, but not both.
+- optional GqlQuery gql_query = 7;
+-}
+-
+-// The response for RunQuery.
+-message RunQueryResponse {
+-
+- // A batch of query results (always present).
+- optional QueryResultBatch batch = 1;
+-
+-}
+-
+-// The request for BeginTransaction.
+-message BeginTransactionRequest {
+-
+- enum IsolationLevel {
+- SNAPSHOT = 0; // Read from a consistent snapshot. Concurrent transactions
+- // conflict if their mutations conflict. For example:
+- // Read(A),Write(B) may not conflict with Read(B),Write(A),
+- // but Read(B),Write(B) does conflict with Read(B),Write(B).
+- SERIALIZABLE = 1; // Read from a consistent snapshot. Concurrent
+- // transactions conflict if they cannot be serialized.
+- // For example Read(A),Write(B) does conflict with
+- // Read(B),Write(A) but Read(A) may not conflict with
+- // Write(A).
+- }
+-
+- // The transaction isolation level.
+- optional IsolationLevel isolation_level = 1 [default=SNAPSHOT];
+-}
+-
+-// The response for BeginTransaction.
+-message BeginTransactionResponse {
+-
+- // The transaction identifier (always present).
+- optional bytes /* serialized Transaction */ transaction = 1;
+-}
+-
+-// The request for Rollback.
+-message RollbackRequest {
+-
+- // The transaction identifier, returned by a call to
+- // <code>beginTransaction</code>.
+- required bytes /* serialized Transaction */ transaction = 1;
+-}
+-
+-// The response for Rollback.
+-message RollbackResponse {
+-// Empty
+-}
+-
+-// The request for Commit.
+-message CommitRequest {
+-
+- enum Mode {
+- TRANSACTIONAL = 1;
+- NON_TRANSACTIONAL = 2;
+- }
+-
+- // The transaction identifier, returned by a call to
+- // <code>beginTransaction</code>. Must be set when mode is TRANSACTIONAL.
+- optional bytes /* serialized Transaction */ transaction = 1;
+- // The mutation to perform. Optional.
+- optional Mutation mutation = 2;
+- // The type of commit to perform. Either TRANSACTIONAL or NON_TRANSACTIONAL.
+- optional Mode mode = 5 [default=TRANSACTIONAL];
+-}
+-
+-// The response for Commit.
+-message CommitResponse {
+-
+- // The result of performing the mutation (if any).
+- optional MutationResult mutation_result = 1;
+-}
+-
+-// The request for AllocateIds.
+-message AllocateIdsRequest {
+-
+- // A list of keys with incomplete key paths to allocate IDs for.
+- // No key may be reserved/read-only.
+- repeated Key key = 1;
+-}
+-
+-// The response for AllocateIds.
+-message AllocateIdsResponse {
+-
+- // The keys specified in the request (in the same order), each with
+- // its key path completed with a newly allocated ID.
+- repeated Key key = 1;
+-}
+-
+-// Each rpc normalizes the partition IDs of the keys in its input entities,
+-// and always returns entities with keys with normalized partition IDs.
+-// (Note that applies to all entities, including entities in values.)
+-service DatastoreService {
+- // Look up some entities by key.
+- rpc Lookup(LookupRequest) returns (LookupResponse) {
+- };
+- // Query for entities.
+- rpc RunQuery(RunQueryRequest) returns (RunQueryResponse) {
+- };
+- // Begin a new transaction.
+- rpc BeginTransaction(BeginTransactionRequest) returns (BeginTransactionResponse) {
+- };
+- // Commit a transaction, optionally creating, deleting or modifying some
+- // entities.
+- rpc Commit(CommitRequest) returns (CommitResponse) {
+- };
+- // Roll back a transaction.
+- rpc Rollback(RollbackRequest) returns (RollbackResponse) {
+- };
+- // Allocate IDs for incomplete keys (useful for referencing an entity before
+- // it is inserted).
+- rpc AllocateIds(AllocateIdsRequest) returns (AllocateIdsResponse) {
+- };
+-}
+diff --git a/Godeps/_workspace/src/google.golang.org/cloud/internal/testutil/context.go b/Godeps/_workspace/src/google.golang.org/cloud/internal/testutil/context.go
+deleted file mode 100644
+index aafd683..0000000
+--- a/Godeps/_workspace/src/google.golang.org/cloud/internal/testutil/context.go
++++ /dev/null
+@@ -1,57 +0,0 @@
+-// Copyright 2014 Google Inc. All Rights Reserved.
+-//
+-// 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 testutil contains helper functions for writing tests.
+-package testutil
+-
+-import (
+- "io/ioutil"
+- "log"
+- "net/http"
+- "os"
+-
+- "golang.org/x/net/context"
+- "golang.org/x/oauth2"
+- "golang.org/x/oauth2/google"
+- "google.golang.org/cloud"
+-)
+-
+-const (
+- envProjID = "GCLOUD_TESTS_GOLANG_PROJECT_ID"
+- envPrivateKey = "GCLOUD_TESTS_GOLANG_KEY"
+-)
+-
+-func Context(scopes ...string) context.Context {
+- key, projID := os.Getenv(envPrivateKey), os.Getenv(envProjID)
+- if key == "" || projID == "" {
+- log.Fatal("GCLOUD_TESTS_GOLANG_KEY and GCLOUD_TESTS_GOLANG_PROJECT_ID must be set. See CONTRIBUTING.md for details.")
+- }
+- jsonKey, err := ioutil.ReadFile(key)
+- if err != nil {
+- log.Fatalf("Cannot read the JSON key file, err: %v", err)
+- }
+- conf, err := google.JWTConfigFromJSON(jsonKey, scopes...)
+- if err != nil {
+- log.Fatal(err)
+- }
+- return cloud.NewContext(projID, conf.Client(oauth2.NoContext))
+-}
+-
+-func NoAuthContext() context.Context {
+- projID := os.Getenv(envProjID)
+- if projID == "" {
+- log.Fatal("GCLOUD_TESTS_GOLANG_PROJECT_ID must be set. See CONTRIBUTING.md for details.")
+- }
+- return cloud.NewContext(projID, &http.Client{Transport: http.DefaultTransport})
+-}
+--
+1.9.3
+
diff --git a/Change-etcd-server-port.patch b/Change-etcd-server-port.patch
new file mode 100644
index 0000000..ba956af
--- /dev/null
+++ b/Change-etcd-server-port.patch
@@ -0,0 +1,25 @@
+From 23d7f34af3e6974eea43abe1ca9b3054822014cf Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Mon, 10 Aug 2015 09:55:49 +0200
+Subject: [PATCH] Change etcd server port
+
+---
+ contrib/init/systemd/environ/apiserver | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/contrib/init/systemd/environ/apiserver b/contrib/init/systemd/environ/apiserver
+index 223b992..ddb5974 100644
+--- a/contrib/init/systemd/environ/apiserver
++++ b/contrib/init/systemd/environ/apiserver
+@@ -14,7 +14,7 @@ KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
+ # KUBELET_PORT="--kubelet-port=10250"
+
+ # Comma separated list of nodes in the etcd cluster
+-KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:4001"
++KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
+
+ # Address range to use for services
+ KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
+--
+1.9.3
+
diff --git a/build-with-debug-info.patch b/build-with-debug-info.patch
new file mode 100644
index 0000000..5f9cdaa
--- /dev/null
+++ b/build-with-debug-info.patch
@@ -0,0 +1,34 @@
+From e57209b6b8e970aa9db06aa69a0e6bcb4098c18c Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Mon, 4 Jan 2016 09:08:07 +0100
+Subject: [PATCH] build with debug info
+
+---
+ hack/lib/golang.sh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh
+index 04c56cc..26a8dc2 100755
+--- a/hack/lib/golang.sh
++++ b/hack/lib/golang.sh
+@@ -371,7 +371,7 @@ kube::golang::build_binaries_for_platform() {
+ local outfile=$(kube::golang::output_filename_for_binary "${binary}" "${platform}")
+ CGO_ENABLED=0 go build -o "${outfile}" \
+ "${goflags[@]:+${goflags[@]}}" \
+- -ldflags "${goldflags}" \
++ -ldflags "-B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \n') ${goldflags}" \
+ "${binary}"
+ kube::log::progress "*"
+ done
+@@ -379,7 +379,7 @@ kube::golang::build_binaries_for_platform() {
+ local outfile=$(kube::golang::output_filename_for_binary "${binary}" "${platform}")
+ go build -o "${outfile}" \
+ "${goflags[@]:+${goflags[@]}}" \
+- -ldflags "${goldflags}" \
++ -ldflags "-B 0x$(head -c20 /dev/urandom|od -An -tx1|tr -d ' \n') ${goldflags}" \
+ "${binary}"
+ kube::log::progress "*"
+ done
+--
+1.9.3
+
diff --git a/disable-v1beta3.patch b/disable-v1beta3.patch
new file mode 100644
index 0000000..1f5c439
--- /dev/null
+++ b/disable-v1beta3.patch
@@ -0,0 +1,25 @@
+From c8df9ca6c4fc7d9dd9578278e6537b865a3532e4 Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Mon, 29 Feb 2016 14:53:50 +0100
+Subject: [PATCH] disable v1beta3
+
+---
+ pkg/api/install/install.go | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pkg/api/install/install.go b/pkg/api/install/install.go
+index eb15b54..b239dc5 100644
+--- a/pkg/api/install/install.go
++++ b/pkg/api/install/install.go
+@@ -39,7 +39,7 @@ const importPrefix = "k8s.io/kubernetes/pkg/api"
+ var accessor = meta.NewAccessor()
+
+ // availableVersions lists all known external versions for this group from most preferred to least preferred
+-var availableVersions = []unversioned.GroupVersion{v1.SchemeGroupVersion, v1beta3.SchemeGroupVersion}
++var availableVersions = []unversioned.GroupVersion{v1.SchemeGroupVersion}
+
+ func init() {
+ registered.RegisterVersions(availableVersions)
+--
+1.9.3
+
diff --git a/fix-support-for-ppc64le.patch b/fix-support-for-ppc64le.patch
new file mode 100644
index 0000000..dfab8de
--- /dev/null
+++ b/fix-support-for-ppc64le.patch
@@ -0,0 +1,40 @@
+From f152eb2f28b9695530be68d01a87ca0fe6fbd918 Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Mon, 25 Apr 2016 12:06:49 +0200
+Subject: [PATCH] fix-support-for-ppc64le
+
+---
+ hack/lib/golang.sh | 3 ---
+ hack/lib/init.sh | 2 +-
+ 2 files changed, 1 insertion(+), 4 deletions(-)
+
+diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh
+index 49ffba6..12ae06d 100755
+--- a/hack/lib/golang.sh
++++ b/hack/lib/golang.sh
+@@ -222,9 +222,6 @@ kube::golang::set_platform_envs() {
+ elif [[ ${platform} == "linux/arm64" ]]; then
+ export CGO_ENABLED=1
+ export CC=aarch64-linux-gnu-gcc
+- elif [[ ${platform} == "linux/ppc64le" ]]; then
+- export CGO_ENABLED=1
+- export CC=powerpc64le-linux-gnu-gcc
+ fi
+ }
+
+diff --git a/hack/lib/init.sh b/hack/lib/init.sh
+index 1a18946..257204c 100644
+--- a/hack/lib/init.sh
++++ b/hack/lib/init.sh
+@@ -28,7 +28,7 @@ KUBE_ROOT=$(
+
+ KUBE_OUTPUT_SUBPATH="${KUBE_OUTPUT_SUBPATH:-_output/local}"
+ KUBE_OUTPUT="${KUBE_ROOT}/${KUBE_OUTPUT_SUBPATH}"
+-KUBE_OUTPUT_BINPATH="${KUBE_OUTPUT}/bin"
++KUBE_OUTPUT_BINPATH="${KUBE_OUTPUT}/go/bin"
+
+ source "${KUBE_ROOT}/hack/lib/util.sh"
+ source "${KUBE_ROOT}/cluster/lib/util.sh"
+--
+1.9.3
+
diff --git a/genmanpages.sh b/genmanpages.sh
new file mode 100644
index 0000000..a4b20c9
--- /dev/null
+++ b/genmanpages.sh
@@ -0,0 +1,84 @@
+MDSFORMANPAGES="kube-apiserver.md kube-controller-manager.md kube-proxy.md kube-scheduler.md kubelet.md"
+
+# remove comments from man pages
+for manpage in ${MDSFORMANPAGES}; do
+ pos=$(grep -n "<\!-- END MUNGE: UNVERSIONED_WARNING -->" ${manpage} | cut -d':' -f1)
+ if [ -n ${pos} ]; then
+ sed -i "1,${pos}{/.*/d}" ${manpage}
+ fi
+done
+
+# for each man page add NAME and SYNOPSIS section
+# kube-apiserver
+sed -i -s "s/## kube-apiserver/# NAME\nkube-apiserver \- Provides the API for kubernetes orchestration.\n\n# SYNOPSIS\n**kube-apiserver** [OPTIONS]\n/" kube-apiserver.md
+
+cat << 'EOF' >> kube-apiserver.md
+# EXAMPLES
+```
+/usr/bin/kube-apiserver --logtostderr=true --v=0 --etcd_servers=http://127.0.0.1:4001 --insecure_bind_address=127.0.0.1 --insecure_port=8080 --kubelet_port=10250 --service-cluster-ip-range=10.1.1.0/24 --allow_privileged=false
+```
+EOF
+# kube-controller-manager
+sed -i -s "s/## kube-controller-manager/# NAME\nkube-controller-manager \- Enforces kubernetes services.\n\n# SYNOPSIS\n**kube-controller-manager** [OPTIONS]\n/" kube-controller-manager.md
+
+cat << 'EOF' >> kube-controller-manager.md
+# EXAMPLES
+```
+/usr/bin/kube-controller-manager --logtostderr=true --v=0 --master=127.0.0.1:8080
+```
+EOF
+# kube-proxy
+sed -i -s "s/## kube-proxy/# NAME\nkube-proxy \- Provides network proxy services.\n\n# SYNOPSIS\n**kube-proxy** [OPTIONS]\n/" kube-proxy.md
+
+cat << 'EOF' >> kube-proxy.md
+# EXAMPLES
+```
+/usr/bin/kube-proxy --logtostderr=true --v=0 --master=http://127.0.0.1:8080
+```
+EOF
+# kube-scheduler
+sed -i -s "s/## kube-scheduler/# NAME\nkube-scheduler \- Schedules containers on hosts.\n\n# SYNOPSIS\n**kube-scheduler** [OPTIONS]\n/" kube-scheduler.md
+
+cat << 'EOF' >> kube-scheduler.md
+# EXAMPLES
+```
+/usr/bin/kube-scheduler --logtostderr=true --v=0 --master=127.0.0.1:8080
+```
+EOF
+# kubelet
+sed -i -s "s/## kubelet/# NAME\nkubelet \- Processes a container manifest so the containers are launched according to how they are described.\n\n# SYNOPSIS\n**kubelet** [OPTIONS]\n/" kubelet.md
+
+cat << 'EOF' >> kubelet.md
+# EXAMPLES
+```
+/usr/bin/kubelet --logtostderr=true --v=0 --api_servers=http://127.0.0.1:8080 --address=127.0.0.1 --port=10250 --hostname_override=127.0.0.1 --allow-privileged=false
+```
+EOF
+
+# for all man-pages
+for md in $MDSFORMANPAGES; do
+ # correct section names
+ sed -i -s "s/### Synopsis/# DESCRIPTION/" $md
+ sed -i -s "s/### Options/# OPTIONS/" $md
+ # add header
+ sed -i "s/# NAME/% KUBERNETES(1) kubernetes User Manuals\n# NAME/" $md
+ # modify list of options
+ # options with no value in ""
+ sed -i -r 's/(^ )(-[^":][^":]*)(:)(.*)/\*\*\2\*\*\n\t\4\n/' $md
+ # option with value in ""
+ sed -i -r 's/(^ )(-[^":][^":]*)("[^"]*")(:)(.*)/\*\*\2\3\*\*\n\t\5\n/' $md
+ # options in -s, --long
+ sed -i -r 's/(^ )(-[a-z], -[^":][^":]*)(:)(.*)/\*\*\2\*\*\n\t\4\n/' $md
+ sed -i -r 's/(^ )(-[a-z], -[^":][^":]*)("[^"]*")(:)(.*)/\*\*\2\3\*\*\n\t\5\n/' $md
+ # remove ```
+ sed -i 's/```//' $md
+ # remove all lines starting with ######
+ sed -i 's/^######.*//' $md
+ # modify footer
+ sed -i -r "s/^\[!\[Analytics\].*//" $md
+ # md does not contain section => taking 1
+ name="${md%.md}"
+ go-md2man -in $md -out man/man1/$name.1
+done
+
+
diff --git a/hack-test-cmd.sh.patch b/hack-test-cmd.sh.patch
new file mode 100644
index 0000000..56b39d2
--- /dev/null
+++ b/hack-test-cmd.sh.patch
@@ -0,0 +1,25 @@
+From 711edb06c665fa9a14e98ed7b0f1d943b26fd5ac Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Mon, 22 Feb 2016 10:11:46 +0100
+Subject: [PATCH] hack hack/test-cmd.sh
+
+---
+ hack/lib/init.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/hack/lib/init.sh b/hack/lib/init.sh
+index 9fa47ca..1a18946 100644
+--- a/hack/lib/init.sh
++++ b/hack/lib/init.sh
+@@ -40,7 +40,7 @@ source "${KUBE_ROOT}/hack/lib/version.sh"
+ source "${KUBE_ROOT}/hack/lib/golang.sh"
+ source "${KUBE_ROOT}/hack/lib/etcd.sh"
+
+-KUBE_OUTPUT_HOSTBIN="${KUBE_OUTPUT_BINPATH}/$(kube::util::host_platform)"
++KUBE_OUTPUT_HOSTBIN="/usr/bin"
+
+ # emulates "readlink -f" which is not available on BSD (OS X).
+ function readlinkdashf {
+--
+1.9.3
+
diff --git a/hyperkube-kubectl-dont-shift-os.Args.patch b/hyperkube-kubectl-dont-shift-os.Args.patch
new file mode 100644
index 0000000..02abeba
--- /dev/null
+++ b/hyperkube-kubectl-dont-shift-os.Args.patch
@@ -0,0 +1,24 @@
+From 0b94fc23c1c9ea2ad14fcbc9e436510d1992b2ca Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Mon, 29 Feb 2016 16:07:27 +0100
+Subject: [PATCH] hyperkube-kubectl-dont shift os.Args
+
+---
+ cmd/hyperkube/kubectl.go | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/cmd/hyperkube/kubectl.go b/cmd/hyperkube/kubectl.go
+index 9da15cf..954422d 100644
+--- a/cmd/hyperkube/kubectl.go
++++ b/cmd/hyperkube/kubectl.go
+@@ -28,7 +28,6 @@ func NewKubectlServer() *Server {
+ SimpleUsage: "Kubernetes command line client",
+ Long: "Kubernetes command line client",
+ Run: func(s *Server, args []string) error {
+- os.Args = os.Args[1:]
+ if err := app.Run(); err != nil {
+ os.Exit(1)
+ }
+--
+1.9.3
+
diff --git a/hyperkube.server-don-t-parse-args-for-any-command.patch b/hyperkube.server-don-t-parse-args-for-any-command.patch
new file mode 100644
index 0000000..c0afc02
--- /dev/null
+++ b/hyperkube.server-don-t-parse-args-for-any-command.patch
@@ -0,0 +1,117 @@
+From c2f1a99104dbe0003080e64ef8300ba421414d66 Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Tue, 8 Mar 2016 18:48:06 +0100
+Subject: [PATCH] hyperkube.server: don't parse args for any command
+
+---
+ cmd/hyperkube/hyperkube.go | 16 +++++++++-------
+ cmd/hyperkube/kube-controller-manager.go | 1 +
+ cmd/hyperkube/kube-proxy.go | 1 +
+ cmd/hyperkube/kube-scheduler.go | 1 +
+ cmd/hyperkube/kubectl.go | 1 +
+ cmd/hyperkube/kubelet.go | 1 +
+ cmd/hyperkube/server.go | 1 +
+ 7 files changed, 15 insertions(+), 7 deletions(-)
+
+diff --git a/cmd/hyperkube/hyperkube.go b/cmd/hyperkube/hyperkube.go
+index 5272c5d..fda068a 100644
+--- a/cmd/hyperkube/hyperkube.go
++++ b/cmd/hyperkube/hyperkube.go
+@@ -154,14 +154,16 @@ func (hk *HyperKube) Run(args []string) error {
+ return err
+ }
+
+- s.Flags().AddFlagSet(hk.Flags())
+- err = s.Flags().Parse(args)
+- if err != nil || hk.helpFlagVal {
+- if err != nil {
+- hk.Printf("Error: %v\n\n", err)
++ if !s.NoParse {
++ s.Flags().AddFlagSet(hk.Flags())
++ err = s.Flags().Parse(args)
++ if err != nil || hk.helpFlagVal {
++ if err != nil {
++ hk.Printf("Error: %v\n\n", err)
++ }
++ s.Usage()
++ return err
+ }
+- s.Usage()
+- return err
+ }
+
+ verflag.PrintAndExitIfRequested()
+diff --git a/cmd/hyperkube/kube-controller-manager.go b/cmd/hyperkube/kube-controller-manager.go
+index 1fc5107..5b3c4a8 100644
+--- a/cmd/hyperkube/kube-controller-manager.go
++++ b/cmd/hyperkube/kube-controller-manager.go
+@@ -34,6 +34,7 @@ func NewKubeControllerManager() *Server {
+ Run: func(_ *Server, args []string) error {
+ return app.Run(s)
+ },
++ NoParse: false,
+ }
+ s.AddFlags(hks.Flags())
+ return &hks
+diff --git a/cmd/hyperkube/kube-proxy.go b/cmd/hyperkube/kube-proxy.go
+index 0a010d8..86dbb95 100644
+--- a/cmd/hyperkube/kube-proxy.go
++++ b/cmd/hyperkube/kube-proxy.go
+@@ -34,6 +34,7 @@ func NewKubeProxy() *Server {
+ services and forwarding it to the appropriate pods. It generally runs on
+ nodes next to the Kubelet and proxies traffic from local pods to remote pods.
+ It is also used when handling incoming external traffic.`,
++ NoParse: false,
+ }
+
+ config.AddFlags(hks.Flags())
+diff --git a/cmd/hyperkube/kube-scheduler.go b/cmd/hyperkube/kube-scheduler.go
+index 4be08e1..5efdf42 100644
+--- a/cmd/hyperkube/kube-scheduler.go
++++ b/cmd/hyperkube/kube-scheduler.go
+@@ -34,6 +34,7 @@ func NewScheduler() *Server {
+ Run: func(_ *Server, _ []string) error {
+ return app.Run(s)
+ },
++ NoParse: false,
+ }
+ s.AddFlags(hks.Flags())
+ return &hks
+diff --git a/cmd/hyperkube/kubectl.go b/cmd/hyperkube/kubectl.go
+index 954422d..f35c75c 100644
+--- a/cmd/hyperkube/kubectl.go
++++ b/cmd/hyperkube/kubectl.go
+@@ -34,5 +34,6 @@ func NewKubectlServer() *Server {
+ os.Exit(0)
+ return nil
+ },
++ NoParse: true,
+ }
+ }
+diff --git a/cmd/hyperkube/kubelet.go b/cmd/hyperkube/kubelet.go
+index 0c2f616..a0a1037 100644
+--- a/cmd/hyperkube/kubelet.go
++++ b/cmd/hyperkube/kubelet.go
+@@ -36,6 +36,7 @@ func NewKubelet() *Server {
+ Run: func(_ *Server, _ []string) error {
+ return app.Run(s, nil)
+ },
++ NoParse: false,
+ }
+ s.AddFlags(hks.Flags())
+ return &hks
+diff --git a/cmd/hyperkube/server.go b/cmd/hyperkube/server.go
+index 6b6e5ce..0baa814 100644
+--- a/cmd/hyperkube/server.go
++++ b/cmd/hyperkube/server.go
+@@ -34,6 +34,7 @@ type Server struct {
+ SimpleUsage string // One line description of the server.
+ Long string // Longer free form description of the server
+ Run serverRunFunc // Run the server. This is not expected to return.
++ NoParse bool // Don't parse options. Some commands do it on their own.
+
+ flags *pflag.FlagSet // Flags for the command (and all dependents)
+ name string
+--
+1.9.3
+
diff --git a/internal-to-inteernal.patch b/internal-to-inteernal.patch
new file mode 100644
index 0000000..789f13b
--- /dev/null
+++ b/internal-to-inteernal.patch
@@ -0,0 +1,3549 @@
+From 613cb303ac0d22786e9c4d153e993c6c8adcd2bb Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Wed, 14 Oct 2015 12:37:01 +0200
+Subject: [PATCH] internal to inteernal
+
+---
+ .../src/github.com/gonum/blas/native/dgemm.go | 2 +-
+ .../github.com/gonum/blas/native/level1double.go | 2 +-
+ .../gonum/blas/native/level1double_ddot.go | 2 +-
+ .../github.com/gonum/blas/native/level1single.go | 2 +-
+ .../gonum/blas/native/level1single_dsdot.go | 2 +-
+ .../gonum/blas/native/level1single_sdot.go | 2 +-
+ .../gonum/blas/native/level1single_sdsdot.go | 2 +-
+ .../github.com/gonum/blas/native/level2double.go | 2 +-
+ .../github.com/gonum/blas/native/level2single.go | 2 +-
+ .../github.com/gonum/blas/native/level3double.go | 2 +-
+ .../github.com/gonum/blas/native/level3single.go | 2 +-
+ .../src/github.com/gonum/blas/native/sgemm.go | 2 +-
+ .../src/github.com/gonum/graph/inteernal/linear.go | 73 ++++
+ .../src/github.com/gonum/graph/inteernal/set.go | 211 +++++++++++
+ .../github.com/gonum/graph/inteernal/set_test.go | 413 +++++++++++++++++++++
+ .../src/github.com/gonum/graph/inteernal/sort.go | 28 ++
+ .../src/github.com/gonum/graph/internal/linear.go | 73 ----
+ .../src/github.com/gonum/graph/internal/set.go | 211 -----------
+ .../github.com/gonum/graph/internal/set_test.go | 413 ---------------------
+ .../src/github.com/gonum/graph/internal/sort.go | 28 --
+ .../github.com/gonum/graph/network/betweenness.go | 2 +-
+ .../src/github.com/gonum/graph/path/a_star.go | 2 +-
+ .../github.com/gonum/graph/path/control_flow.go | 2 +-
+ .../github.com/gonum/graph/path/dijkstra_test.go | 2 +-
+ .../gonum/graph/path/floydwarshall_test.go | 2 +-
+ .../gonum/graph/path/johnson_apsp_test.go | 2 +-
+ .../github.com/gonum/graph/path/spanning_tree.go | 2 +-
+ .../github.com/gonum/graph/topo/bron_kerbosch.go | 2 +-
+ .../gonum/graph/topo/bron_kerbosch_test.go | 2 +-
+ .../github.com/gonum/graph/topo/johnson_cycles.go | 2 +-
+ .../gonum/graph/topo/johnson_cycles_test.go | 2 +-
+ .../src/github.com/gonum/graph/topo/tarjan.go | 2 +-
+ .../src/github.com/gonum/graph/topo/tarjan_test.go | 2 +-
+ .../src/github.com/gonum/graph/topo/topo_test.go | 2 +-
+ .../github.com/gonum/graph/traverse/traverse.go | 2 +-
+ .../gonum/graph/traverse/traverse_test.go | 2 +-
+ .../src/github.com/gonum/inteernal/asm/caxpy.go | 22 ++
+ .../src/github.com/gonum/inteernal/asm/cdotc.go | 23 ++
+ .../src/github.com/gonum/inteernal/asm/cdotu.go | 23 ++
+ .../src/github.com/gonum/inteernal/asm/complex | 58 +++
+ .../src/github.com/gonum/inteernal/asm/conj.go | 7 +
+ .../src/github.com/gonum/inteernal/asm/daxpy.go | 22 ++
+ .../github.com/gonum/inteernal/asm/daxpy_amd64.go | 12 +
+ .../github.com/gonum/inteernal/asm/daxpy_amd64.s | 140 +++++++
+ .../src/github.com/gonum/inteernal/asm/ddot.go | 23 ++
+ .../github.com/gonum/inteernal/asm/ddot_amd64.go | 10 +
+ .../github.com/gonum/inteernal/asm/ddot_amd64.s | 140 +++++++
+ .../src/github.com/gonum/inteernal/asm/dsdot.go | 23 ++
+ .../src/github.com/gonum/inteernal/asm/generate.go | 8 +
+ .../src/github.com/gonum/inteernal/asm/saxpy.go | 22 ++
+ .../src/github.com/gonum/inteernal/asm/sdot.go | 23 ++
+ .../gonum/inteernal/asm/single_precision | 30 ++
+ .../src/github.com/gonum/inteernal/asm/zaxpy.go | 22 ++
+ .../src/github.com/gonum/inteernal/asm/zdotc.go | 25 ++
+ .../src/github.com/gonum/inteernal/asm/zdotu.go | 23 ++
+ .../src/github.com/gonum/internal/asm/caxpy.go | 22 --
+ .../src/github.com/gonum/internal/asm/cdotc.go | 23 --
+ .../src/github.com/gonum/internal/asm/cdotu.go | 23 --
+ .../src/github.com/gonum/internal/asm/complex | 58 ---
+ .../src/github.com/gonum/internal/asm/conj.go | 7 -
+ .../src/github.com/gonum/internal/asm/daxpy.go | 22 --
+ .../github.com/gonum/internal/asm/daxpy_amd64.go | 12 -
+ .../github.com/gonum/internal/asm/daxpy_amd64.s | 140 -------
+ .../src/github.com/gonum/internal/asm/ddot.go | 23 --
+ .../github.com/gonum/internal/asm/ddot_amd64.go | 10 -
+ .../src/github.com/gonum/internal/asm/ddot_amd64.s | 140 -------
+ .../src/github.com/gonum/internal/asm/dsdot.go | 23 --
+ .../src/github.com/gonum/internal/asm/generate.go | 8 -
+ .../src/github.com/gonum/internal/asm/saxpy.go | 22 --
+ .../src/github.com/gonum/internal/asm/sdot.go | 23 --
+ .../github.com/gonum/internal/asm/single_precision | 30 --
+ .../src/github.com/gonum/internal/asm/zaxpy.go | 22 --
+ .../src/github.com/gonum/internal/asm/zdotc.go | 25 --
+ .../src/github.com/gonum/internal/asm/zdotu.go | 23 --
+ .../src/github.com/gonum/matrix/mat64/inner.go | 2 +-
+ 75 files changed, 1410 insertions(+), 1410 deletions(-)
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/set.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go
+ create mode 100644 Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/complex
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go
+ delete mode 100644 Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go b/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go
+index 850f62c..8dc9920 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/dgemm.go
+@@ -10,7 +10,7 @@ import (
+ "sync"
+
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ // Dgemm computes
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go
+index 0d77243..65f2972 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double.go
+@@ -8,7 +8,7 @@ import (
+ "math"
+
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ var _ blas.Float64Level1 = Implementation{}
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go
+index 7af4e04..84a16ed 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1double_ddot.go
+@@ -5,7 +5,7 @@
+ package native
+
+ import (
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ // Ddot computes the dot product of the two vectors
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go
+index 6bcba83..ca82629 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single.go
+@@ -10,7 +10,7 @@ import (
+ math "github.com/gonum/blas/native/internal/math32"
+
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ var _ blas.Float32Level1 = Implementation{}
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go
+index 4665a01..a438155 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_dsdot.go
+@@ -7,7 +7,7 @@
+ package native
+
+ import (
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ // Dsdot computes the dot product of the two vectors
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go
+index 1e5b565..7d96b74 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdot.go
+@@ -7,7 +7,7 @@
+ package native
+
+ import (
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ // Sdot computes the dot product of the two vectors
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go
+index d58be3d..79543d4 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level1single_sdsdot.go
+@@ -7,7 +7,7 @@
+ package native
+
+ import (
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ // Sdsdot computes the dot product of the two vectors plus a constant
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go
+index 6d59559..af62cd1 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level2double.go
+@@ -6,7 +6,7 @@ package native
+
+ import (
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ var _ blas.Float64Level2 = Implementation{}
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go
+index b213ad6..6720c0e 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level2single.go
+@@ -8,7 +8,7 @@ package native
+
+ import (
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ var _ blas.Float32Level2 = Implementation{}
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go
+index 5a19652..47d5d15 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level3double.go
+@@ -6,7 +6,7 @@ package native
+
+ import (
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ var _ blas.Float64Level3 = Implementation{}
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go b/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go
+index 6bc9a56..82212a0 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/level3single.go
+@@ -8,7 +8,7 @@ package native
+
+ import (
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ var _ blas.Float32Level3 = Implementation{}
+diff --git a/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go b/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go
+index 047d4e5..0387945 100644
+--- a/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go
++++ b/Godeps/_workspace/src/github.com/gonum/blas/native/sgemm.go
+@@ -12,7 +12,7 @@ import (
+ "sync"
+
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ // Sgemm computes
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go
+new file mode 100644
+index 0000000..3d64de9
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/linear.go
+@@ -0,0 +1,73 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package internal
++
++import (
++ "github.com/gonum/graph"
++)
++
++// NodeStack implements a LIFO stack of graph.Node.
++type NodeStack []graph.Node
++
++// Len returns the number of graph.Nodes on the stack.
++func (s *NodeStack) Len() int { return len(*s) }
++
++// Pop returns the last graph.Node on the stack and removes it
++// from the stack.
++func (s *NodeStack) Pop() graph.Node {
++ v := *s
++ v, n := v[:len(v)-1], v[len(v)-1]
++ *s = v
++ return n
++}
++
++// Push adds the node n to the stack at the last position.
++func (s *NodeStack) Push(n graph.Node) { *s = append(*s, n) }
++
++// NodeQueue implements a FIFO queue.
++type NodeQueue struct {
++ head int
++ data []graph.Node
++}
++
++// Len returns the number of graph.Nodes in the queue.
++func (q *NodeQueue) Len() int { return len(q.data) - q.head }
++
++// Enqueue adds the node n to the back of the queue.
++func (q *NodeQueue) Enqueue(n graph.Node) {
++ if len(q.data) == cap(q.data) && q.head > 0 {
++ l := q.Len()
++ copy(q.data, q.data[q.head:])
++ q.head = 0
++ q.data = append(q.data[:l], n)
++ } else {
++ q.data = append(q.data, n)
++ }
++}
++
++// Dequeue returns the graph.Node at the front of the queue and
++// removes it from the queue.
++func (q *NodeQueue) Dequeue() graph.Node {
++ if q.Len() == 0 {
++ panic("queue: empty queue")
++ }
++
++ var n graph.Node
++ n, q.data[q.head] = q.data[q.head], nil
++ q.head++
++
++ if q.Len() == 0 {
++ q.head = 0
++ q.data = q.data[:0]
++ }
++
++ return n
++}
++
++// Reset clears the queue for reuse.
++func (q *NodeQueue) Reset() {
++ q.head = 0
++ q.data = q.data[:0]
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go
+new file mode 100644
+index 0000000..3ad1bc8
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set.go
+@@ -0,0 +1,211 @@
++// Copyright ©2014 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package internal
++
++import (
++ "unsafe"
++
++ "github.com/gonum/graph"
++)
++
++// IntSet is a set of integer identifiers.
++type IntSet map[int]struct{}
++
++// The simple accessor methods for Set are provided to allow ease of
++// implementation change should the need arise.
++
++// Add inserts an element into the set.
++func (s IntSet) Add(e int) {
++ s[e] = struct{}{}
++}
++
++// Has reports the existence of the element in the set.
++func (s IntSet) Has(e int) bool {
++ _, ok := s[e]
++ return ok
++}
++
++// Remove deletes the specified element from the set.
++func (s IntSet) Remove(e int) {
++ delete(s, e)
++}
++
++// Count reports the number of elements stored in the set.
++func (s IntSet) Count() int {
++ return len(s)
++}
++
++// Same determines whether two sets are backed by the same store. In the
++// current implementation using hash maps it makes use of the fact that
++// hash maps (at least in the gc implementation) are passed as a pointer
++// to a runtime Hmap struct.
++//
++// A map is not seen by the runtime as a pointer though, so we cannot
++// directly compare the sets converted to unsafe.Pointer and need to take
++// the sets' addressed and dereference them as pointers to some comparable
++// type.
++func Same(s1, s2 Set) bool {
++ return *(*uintptr)(unsafe.Pointer(&s1)) == *(*uintptr)(unsafe.Pointer(&s2))
++}
++
++// A set is a set of nodes keyed in their integer identifiers.
++type Set map[int]graph.Node
++
++// The simple accessor methods for Set are provided to allow ease of
++// implementation change should the need arise.
++
++// Add inserts an element into the set.
++func (s Set) Add(n graph.Node) {
++ s[n.ID()] = n
++}
++
++// Remove deletes the specified element from the set.
++func (s Set) Remove(e graph.Node) {
++ delete(s, e.ID())
++}
++
++// Has reports the existence of the element in the set.
++func (s Set) Has(n graph.Node) bool {
++ _, ok := s[n.ID()]
++ return ok
++}
++
++// Clear returns an empty set, possibly using the same backing store.
++// Clear is not provided as a method since there is no way to replace
++// the calling value if clearing is performed by a make(set). Clear
++// should never be called without keeping the returned value.
++func Clear(s Set) Set {
++ if len(s) == 0 {
++ return s
++ }
++
++ return make(Set)
++}
++
++// Copy performs a perfect copy from s1 to dst (meaning the sets will
++// be equal).
++func (dst Set) Copy(src Set) Set {
++ if Same(src, dst) {
++ return dst
++ }
++
++ if len(dst) > 0 {
++ dst = make(Set, len(src))
++ }
++
++ for e, n := range src {
++ dst[e] = n
++ }
++
++ return dst
++}
++
++// Equal reports set equality between the parameters. Sets are equal if
++// and only if they have the same elements.
++func Equal(s1, s2 Set) bool {
++ if Same(s1, s2) {
++ return true
++ }
++
++ if len(s1) != len(s2) {
++ return false
++ }
++
++ for e := range s1 {
++ if _, ok := s2[e]; !ok {
++ return false
++ }
++ }
++
++ return true
++}
++
++// Union takes the union of s1 and s2, and stores it in dst.
++//
++// The union of two sets, s1 and s2, is the set containing all the
++// elements of each, for instance:
++//
++// {a,b,c} UNION {d,e,f} = {a,b,c,d,e,f}
++//
++// Since sets may not have repetition, unions of two sets that overlap
++// do not contain repeat elements, that is:
++//
++// {a,b,c} UNION {b,c,d} = {a,b,c,d}
++//
++func (dst Set) Union(s1, s2 Set) Set {
++ if Same(s1, s2) {
++ return dst.Copy(s1)
++ }
++
++ if !Same(s1, dst) && !Same(s2, dst) {
++ dst = Clear(dst)
++ }
++
++ if !Same(dst, s1) {
++ for e, n := range s1 {
++ dst[e] = n
++ }
++ }
++
++ if !Same(dst, s2) {
++ for e, n := range s2 {
++ dst[e] = n
++ }
++ }
++
++ return dst
++}
++
++// Intersect takes the intersection of s1 and s2, and stores it in dst.
++//
++// The intersection of two sets, s1 and s2, is the set containing all
++// the elements shared between the two sets, for instance:
++//
++// {a,b,c} INTERSECT {b,c,d} = {b,c}
++//
++// The intersection between a set and itself is itself, and thus
++// effectively a copy operation:
++//
++// {a,b,c} INTERSECT {a,b,c} = {a,b,c}
++//
++// The intersection between two sets that share no elements is the empty
++// set:
++//
++// {a,b,c} INTERSECT {d,e,f} = {}
++//
++func (dst Set) Intersect(s1, s2 Set) Set {
++ var swap Set
++
++ if Same(s1, s2) {
++ return dst.Copy(s1)
++ }
++ if Same(s1, dst) {
++ swap = s2
++ } else if Same(s2, dst) {
++ swap = s1
++ } else {
++ dst = Clear(dst)
++
++ if len(s1) > len(s2) {
++ s1, s2 = s2, s1
++ }
++
++ for e, n := range s1 {
++ if _, ok := s2[e]; ok {
++ dst[e] = n
++ }
++ }
++
++ return dst
++ }
++
++ for e := range dst {
++ if _, ok := swap[e]; !ok {
++ delete(dst, e)
++ }
++ }
++
++ return dst
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go
+new file mode 100644
+index 0000000..fb39620
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/set_test.go
+@@ -0,0 +1,413 @@
++// Copyright ©2014 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package internal
++
++import "testing"
++
++type node int
++
++func (n node) ID() int { return int(n) }
++
++// count reports the number of elements stored in the set.
++func (s Set) count() int {
++ return len(s)
++}
++
++// TestSame tests the assumption that pointer equality via unsafe conversion
++// of a map[int]struct{} to uintptr is a valid test for perfect identity between
++// set values. If any of the tests in TestSame fail, the package is broken and same
++// must be reimplemented to conform to the runtime map implementation. The relevant
++// code to look at (at least for gc) is in runtime/hashmap.{h,goc}.
++func TestSame(t *testing.T) {
++ var (
++ a = make(Set)
++ b = make(Set)
++ c = a
++ )
++
++ if Same(a, b) {
++ t.Error("Independently created sets test as same")
++ }
++ if !Same(a, c) {
++ t.Error("Set copy and original test as not same.")
++ }
++ a.Add(node(1))
++ if !Same(a, c) {
++ t.Error("Set copy and original test as not same after addition.")
++ }
++ if !Same(nil, nil) {
++ t.Error("nil sets test as not same.")
++ }
++ if Same(b, nil) {
++ t.Error("nil and empty sets test as same.")
++ }
++}
++
++func TestAdd(t *testing.T) {
++ s := make(Set)
++ if s == nil {
++ t.Fatal("Set cannot be created successfully")
++ }
++
++ if s.count() != 0 {
++ t.Error("Set somehow contains new elements upon creation")
++ }
++
++ s.Add(node(1))
++ s.Add(node(3))
++ s.Add(node(5))
++
++ if s.count() != 3 {
++ t.Error("Incorrect number of set elements after adding")
++ }
++
++ if !s.Has(node(1)) || !s.Has(node(3)) || !s.Has(node(5)) {
++ t.Error("Set doesn't contain element that was added")
++ }
++
++ s.Add(node(1))
++
++ if s.count() > 3 {
++ t.Error("Set double-adds element (element not unique)")
++ } else if s.count() < 3 {
++ t.Error("Set double-add lowered len")
++ }
++
++ if !s.Has(node(1)) {
++ t.Error("Set doesn't contain double-added element")
++ }
++
++ if !s.Has(node(3)) || !s.Has(node(5)) {
++ t.Error("Set removes element on double-add")
++ }
++
++ for e, n := range s {
++ if e != n.ID() {
++ t.Error("Element ID did not match key: %d != %d", e, n.ID())
++ }
++ }
++}
++
++func TestRemove(t *testing.T) {
++ s := make(Set)
++
++ s.Add(node(1))
++ s.Add(node(3))
++ s.Add(node(5))
++
++ s.Remove(node(1))
++
++ if s.count() != 2 {
++ t.Error("Incorrect number of set elements after removing an element")
++ }
++
++ if s.Has(node(1)) {
++ t.Error("Element present after removal")
++ }
++
++ if !s.Has(node(3)) || !s.Has(node(5)) {
++ t.Error("Set remove removed wrong element")
++ }
++
++ s.Remove(node(1))
++
++ if s.count() != 2 || s.Has(node(1)) {
++ t.Error("Double set remove does something strange")
++ }
++
++ s.Add(node(1))
++
++ if s.count() != 3 || !s.Has(node(1)) {
++ t.Error("Cannot add element after removal")
++ }
++}
++
++func TestClear(t *testing.T) {
++ s := make(Set)
++
++ s.Add(node(8))
++ s.Add(node(9))
++ s.Add(node(10))
++
++ s = Clear(s)
++
++ if s.count() != 0 {
++ t.Error("Clear did not properly reset set to size 0")
++ }
++}
++
++func TestSelfEqual(t *testing.T) {
++ s := make(Set)
++
++ if !Equal(s, s) {
++ t.Error("Set is not equal to itself")
++ }
++
++ s.Add(node(1))
++
++ if !Equal(s, s) {
++ t.Error("Set ceases self equality after adding element")
++ }
++}
++
++func TestEqual(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++
++ if !Equal(s1, s2) {
++ t.Error("Two different empty sets not equal")
++ }
++
++ s1.Add(node(1))
++ if Equal(s1, s2) {
++ t.Error("Two different sets with different elements not equal")
++ }
++
++ s2.Add(node(1))
++ if !Equal(s1, s2) {
++ t.Error("Two sets with same element not equal")
++ }
++}
++
++func TestCopy(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++
++ s1.Add(node(1))
++ s1.Add(node(2))
++ s1.Add(node(3))
++
++ s2.Copy(s1)
++
++ if !Equal(s1, s2) {
++ t.Fatalf("Two sets not equal after copy")
++ }
++
++ s2.Remove(node(1))
++
++ if Equal(s1, s2) {
++ t.Errorf("Mutating one set mutated another after copy")
++ }
++}
++
++func TestSelfCopy(t *testing.T) {
++ s1 := make(Set)
++
++ s1.Add(node(1))
++ s1.Add(node(2))
++
++ s1.Copy(s1)
++
++ if s1.count() != 2 {
++ t.Error("Something strange happened when copying into self")
++ }
++}
++
++func TestUnionSame(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++ s3 := make(Set)
++
++ s1.Add(node(1))
++ s1.Add(node(2))
++
++ s2.Add(node(1))
++ s2.Add(node(2))
++
++ s3.Union(s1, s2)
++
++ if s3.count() != 2 {
++ t.Error("Union of same sets yields set with wrong len")
++ }
++
++ if !s3.Has(node(1)) || !s3.Has(node(2)) {
++ t.Error("Union of same sets yields wrong elements")
++ }
++
++ for i, s := range []Set{s1, s2, s3} {
++ for e, n := range s {
++ if e != n.ID() {
++ t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
++ }
++ }
++ }
++}
++
++func TestUnionDiff(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++ s3 := make(Set)
++
++ s1.Add(node(1))
++ s1.Add(node(2))
++
++ s2.Add(node(3))
++
++ s3.Union(s1, s2)
++
++ if s3.count() != 3 {
++ t.Error("Union of different sets yields set with wrong len")
++ }
++
++ if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
++ t.Error("Union of different sets yields set with wrong elements")
++ }
++
++ if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
++ t.Error("Union of sets mutates non-destination set (argument 1)")
++ }
++
++ if !s2.Has(node(3)) || s2.Has(node(1)) || s2.Has(node(2)) || s2.count() != 1 {
++ t.Error("Union of sets mutates non-destination set (argument 2)")
++ }
++
++ for i, s := range []Set{s1, s2, s3} {
++ for e, n := range s {
++ if e != n.ID() {
++ t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
++ }
++ }
++ }
++}
++
++func TestUnionOverlapping(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++ s3 := make(Set)
++
++ s1.Add(node(1))
++ s1.Add(node(2))
++
++ s2.Add(node(2))
++ s2.Add(node(3))
++
++ s3.Union(s1, s2)
++
++ if s3.count() != 3 {
++ t.Error("Union of overlapping sets yields set with wrong len")
++ }
++
++ if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
++ t.Error("Union of overlapping sets yields set with wrong elements")
++ }
++
++ if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
++ t.Error("Union of sets mutates non-destination set (argument 1)")
++ }
++
++ if !s2.Has(node(3)) || s2.Has(node(1)) || !s2.Has(node(2)) || s2.count() != 2 {
++ t.Error("Union of sets mutates non-destination set (argument 2)")
++ }
++
++ for i, s := range []Set{s1, s2, s3} {
++ for e, n := range s {
++ if e != n.ID() {
++ t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
++ }
++ }
++ }
++}
++
++func TestIntersectSame(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++ s3 := make(Set)
++
++ s1.Add(node(2))
++ s1.Add(node(3))
++
++ s2.Add(node(2))
++ s2.Add(node(3))
++
++ s3.Intersect(s1, s2)
++
++ if card := s3.count(); card != 2 {
++ t.Errorf("Intersection of identical sets yields set of wrong len %d", card)
++ }
++
++ if !s3.Has(node(2)) || !s3.Has(node(3)) {
++ t.Error("Intersection of identical sets yields set of wrong elements")
++ }
++
++ for i, s := range []Set{s1, s2, s3} {
++ for e, n := range s {
++ if e != n.ID() {
++ t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
++ }
++ }
++ }
++}
++
++func TestIntersectDiff(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++ s3 := make(Set)
++
++ s1.Add(node(2))
++ s1.Add(node(3))
++
++ s2.Add(node(1))
++ s2.Add(node(4))
++
++ s3.Intersect(s1, s2)
++
++ if card := s3.count(); card != 0 {
++ t.Errorf("Intersection of different yields non-empty set %d", card)
++ }
++
++ if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(1)) || s1.Has(node(4)) || s1.count() != 2 {
++ t.Error("Intersection of sets mutates non-destination set (argument 1)")
++ }
++
++ if s2.Has(node(2)) || s2.Has(node(3)) || !s2.Has(node(1)) || !s2.Has(node(4)) || s2.count() != 2 {
++ t.Error("Intersection of sets mutates non-destination set (argument 1)")
++ }
++
++ for i, s := range []Set{s1, s2, s3} {
++ for e, n := range s {
++ if e != n.ID() {
++ t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
++ }
++ }
++ }
++}
++
++func TestIntersectOverlapping(t *testing.T) {
++ s1 := make(Set)
++ s2 := make(Set)
++ s3 := make(Set)
++
++ s1.Add(node(2))
++ s1.Add(node(3))
++
++ s2.Add(node(3))
++ s2.Add(node(4))
++
++ s3.Intersect(s1, s2)
++
++ if card := s3.count(); card != 1 {
++ t.Errorf("Intersection of overlapping sets yields set of incorrect len %d", card)
++ }
++
++ if !s3.Has(node(3)) {
++ t.Errorf("Intersection of overlapping sets yields set with wrong element")
++ }
++
++ if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(4)) || s1.count() != 2 {
++ t.Error("Intersection of sets mutates non-destination set (argument 1)")
++ }
++
++ if s2.Has(node(2)) || !s2.Has(node(3)) || !s2.Has(node(4)) || s2.count() != 2 {
++ t.Error("Intersection of sets mutates non-destination set (argument 1)")
++ }
++
++ for i, s := range []Set{s1, s2, s3} {
++ for e, n := range s {
++ if e != n.ID() {
++ t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
++ }
++ }
++ }
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go
+new file mode 100644
+index 0000000..3bfee0f
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/graph/inteernal/sort.go
+@@ -0,0 +1,28 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package internal
++
++// BySliceValues implements the sort.Interface sorting a slice of
++// []int lexically by the values of the []int.
++type BySliceValues [][]int
++
++func (c BySliceValues) Len() int { return len(c) }
++func (c BySliceValues) Less(i, j int) bool {
++ a, b := c[i], c[j]
++ l := len(a)
++ if len(b) < l {
++ l = len(b)
++ }
++ for k, v := range a[:l] {
++ if v < b[k] {
++ return true
++ }
++ if v > b[k] {
++ return false
++ }
++ }
++ return len(a) < len(b)
++}
++func (c BySliceValues) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go
+deleted file mode 100644
+index 3d64de9..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/linear.go
++++ /dev/null
+@@ -1,73 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package internal
+-
+-import (
+- "github.com/gonum/graph"
+-)
+-
+-// NodeStack implements a LIFO stack of graph.Node.
+-type NodeStack []graph.Node
+-
+-// Len returns the number of graph.Nodes on the stack.
+-func (s *NodeStack) Len() int { return len(*s) }
+-
+-// Pop returns the last graph.Node on the stack and removes it
+-// from the stack.
+-func (s *NodeStack) Pop() graph.Node {
+- v := *s
+- v, n := v[:len(v)-1], v[len(v)-1]
+- *s = v
+- return n
+-}
+-
+-// Push adds the node n to the stack at the last position.
+-func (s *NodeStack) Push(n graph.Node) { *s = append(*s, n) }
+-
+-// NodeQueue implements a FIFO queue.
+-type NodeQueue struct {
+- head int
+- data []graph.Node
+-}
+-
+-// Len returns the number of graph.Nodes in the queue.
+-func (q *NodeQueue) Len() int { return len(q.data) - q.head }
+-
+-// Enqueue adds the node n to the back of the queue.
+-func (q *NodeQueue) Enqueue(n graph.Node) {
+- if len(q.data) == cap(q.data) && q.head > 0 {
+- l := q.Len()
+- copy(q.data, q.data[q.head:])
+- q.head = 0
+- q.data = append(q.data[:l], n)
+- } else {
+- q.data = append(q.data, n)
+- }
+-}
+-
+-// Dequeue returns the graph.Node at the front of the queue and
+-// removes it from the queue.
+-func (q *NodeQueue) Dequeue() graph.Node {
+- if q.Len() == 0 {
+- panic("queue: empty queue")
+- }
+-
+- var n graph.Node
+- n, q.data[q.head] = q.data[q.head], nil
+- q.head++
+-
+- if q.Len() == 0 {
+- q.head = 0
+- q.data = q.data[:0]
+- }
+-
+- return n
+-}
+-
+-// Reset clears the queue for reuse.
+-func (q *NodeQueue) Reset() {
+- q.head = 0
+- q.data = q.data[:0]
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/set.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/set.go
+deleted file mode 100644
+index 3ad1bc8..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/set.go
++++ /dev/null
+@@ -1,211 +0,0 @@
+-// Copyright ©2014 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package internal
+-
+-import (
+- "unsafe"
+-
+- "github.com/gonum/graph"
+-)
+-
+-// IntSet is a set of integer identifiers.
+-type IntSet map[int]struct{}
+-
+-// The simple accessor methods for Set are provided to allow ease of
+-// implementation change should the need arise.
+-
+-// Add inserts an element into the set.
+-func (s IntSet) Add(e int) {
+- s[e] = struct{}{}
+-}
+-
+-// Has reports the existence of the element in the set.
+-func (s IntSet) Has(e int) bool {
+- _, ok := s[e]
+- return ok
+-}
+-
+-// Remove deletes the specified element from the set.
+-func (s IntSet) Remove(e int) {
+- delete(s, e)
+-}
+-
+-// Count reports the number of elements stored in the set.
+-func (s IntSet) Count() int {
+- return len(s)
+-}
+-
+-// Same determines whether two sets are backed by the same store. In the
+-// current implementation using hash maps it makes use of the fact that
+-// hash maps (at least in the gc implementation) are passed as a pointer
+-// to a runtime Hmap struct.
+-//
+-// A map is not seen by the runtime as a pointer though, so we cannot
+-// directly compare the sets converted to unsafe.Pointer and need to take
+-// the sets' addressed and dereference them as pointers to some comparable
+-// type.
+-func Same(s1, s2 Set) bool {
+- return *(*uintptr)(unsafe.Pointer(&s1)) == *(*uintptr)(unsafe.Pointer(&s2))
+-}
+-
+-// A set is a set of nodes keyed in their integer identifiers.
+-type Set map[int]graph.Node
+-
+-// The simple accessor methods for Set are provided to allow ease of
+-// implementation change should the need arise.
+-
+-// Add inserts an element into the set.
+-func (s Set) Add(n graph.Node) {
+- s[n.ID()] = n
+-}
+-
+-// Remove deletes the specified element from the set.
+-func (s Set) Remove(e graph.Node) {
+- delete(s, e.ID())
+-}
+-
+-// Has reports the existence of the element in the set.
+-func (s Set) Has(n graph.Node) bool {
+- _, ok := s[n.ID()]
+- return ok
+-}
+-
+-// Clear returns an empty set, possibly using the same backing store.
+-// Clear is not provided as a method since there is no way to replace
+-// the calling value if clearing is performed by a make(set). Clear
+-// should never be called without keeping the returned value.
+-func Clear(s Set) Set {
+- if len(s) == 0 {
+- return s
+- }
+-
+- return make(Set)
+-}
+-
+-// Copy performs a perfect copy from s1 to dst (meaning the sets will
+-// be equal).
+-func (dst Set) Copy(src Set) Set {
+- if Same(src, dst) {
+- return dst
+- }
+-
+- if len(dst) > 0 {
+- dst = make(Set, len(src))
+- }
+-
+- for e, n := range src {
+- dst[e] = n
+- }
+-
+- return dst
+-}
+-
+-// Equal reports set equality between the parameters. Sets are equal if
+-// and only if they have the same elements.
+-func Equal(s1, s2 Set) bool {
+- if Same(s1, s2) {
+- return true
+- }
+-
+- if len(s1) != len(s2) {
+- return false
+- }
+-
+- for e := range s1 {
+- if _, ok := s2[e]; !ok {
+- return false
+- }
+- }
+-
+- return true
+-}
+-
+-// Union takes the union of s1 and s2, and stores it in dst.
+-//
+-// The union of two sets, s1 and s2, is the set containing all the
+-// elements of each, for instance:
+-//
+-// {a,b,c} UNION {d,e,f} = {a,b,c,d,e,f}
+-//
+-// Since sets may not have repetition, unions of two sets that overlap
+-// do not contain repeat elements, that is:
+-//
+-// {a,b,c} UNION {b,c,d} = {a,b,c,d}
+-//
+-func (dst Set) Union(s1, s2 Set) Set {
+- if Same(s1, s2) {
+- return dst.Copy(s1)
+- }
+-
+- if !Same(s1, dst) && !Same(s2, dst) {
+- dst = Clear(dst)
+- }
+-
+- if !Same(dst, s1) {
+- for e, n := range s1 {
+- dst[e] = n
+- }
+- }
+-
+- if !Same(dst, s2) {
+- for e, n := range s2 {
+- dst[e] = n
+- }
+- }
+-
+- return dst
+-}
+-
+-// Intersect takes the intersection of s1 and s2, and stores it in dst.
+-//
+-// The intersection of two sets, s1 and s2, is the set containing all
+-// the elements shared between the two sets, for instance:
+-//
+-// {a,b,c} INTERSECT {b,c,d} = {b,c}
+-//
+-// The intersection between a set and itself is itself, and thus
+-// effectively a copy operation:
+-//
+-// {a,b,c} INTERSECT {a,b,c} = {a,b,c}
+-//
+-// The intersection between two sets that share no elements is the empty
+-// set:
+-//
+-// {a,b,c} INTERSECT {d,e,f} = {}
+-//
+-func (dst Set) Intersect(s1, s2 Set) Set {
+- var swap Set
+-
+- if Same(s1, s2) {
+- return dst.Copy(s1)
+- }
+- if Same(s1, dst) {
+- swap = s2
+- } else if Same(s2, dst) {
+- swap = s1
+- } else {
+- dst = Clear(dst)
+-
+- if len(s1) > len(s2) {
+- s1, s2 = s2, s1
+- }
+-
+- for e, n := range s1 {
+- if _, ok := s2[e]; ok {
+- dst[e] = n
+- }
+- }
+-
+- return dst
+- }
+-
+- for e := range dst {
+- if _, ok := swap[e]; !ok {
+- delete(dst, e)
+- }
+- }
+-
+- return dst
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go
+deleted file mode 100644
+index fb39620..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/set_test.go
++++ /dev/null
+@@ -1,413 +0,0 @@
+-// Copyright ©2014 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package internal
+-
+-import "testing"
+-
+-type node int
+-
+-func (n node) ID() int { return int(n) }
+-
+-// count reports the number of elements stored in the set.
+-func (s Set) count() int {
+- return len(s)
+-}
+-
+-// TestSame tests the assumption that pointer equality via unsafe conversion
+-// of a map[int]struct{} to uintptr is a valid test for perfect identity between
+-// set values. If any of the tests in TestSame fail, the package is broken and same
+-// must be reimplemented to conform to the runtime map implementation. The relevant
+-// code to look at (at least for gc) is in runtime/hashmap.{h,goc}.
+-func TestSame(t *testing.T) {
+- var (
+- a = make(Set)
+- b = make(Set)
+- c = a
+- )
+-
+- if Same(a, b) {
+- t.Error("Independently created sets test as same")
+- }
+- if !Same(a, c) {
+- t.Error("Set copy and original test as not same.")
+- }
+- a.Add(node(1))
+- if !Same(a, c) {
+- t.Error("Set copy and original test as not same after addition.")
+- }
+- if !Same(nil, nil) {
+- t.Error("nil sets test as not same.")
+- }
+- if Same(b, nil) {
+- t.Error("nil and empty sets test as same.")
+- }
+-}
+-
+-func TestAdd(t *testing.T) {
+- s := make(Set)
+- if s == nil {
+- t.Fatal("Set cannot be created successfully")
+- }
+-
+- if s.count() != 0 {
+- t.Error("Set somehow contains new elements upon creation")
+- }
+-
+- s.Add(node(1))
+- s.Add(node(3))
+- s.Add(node(5))
+-
+- if s.count() != 3 {
+- t.Error("Incorrect number of set elements after adding")
+- }
+-
+- if !s.Has(node(1)) || !s.Has(node(3)) || !s.Has(node(5)) {
+- t.Error("Set doesn't contain element that was added")
+- }
+-
+- s.Add(node(1))
+-
+- if s.count() > 3 {
+- t.Error("Set double-adds element (element not unique)")
+- } else if s.count() < 3 {
+- t.Error("Set double-add lowered len")
+- }
+-
+- if !s.Has(node(1)) {
+- t.Error("Set doesn't contain double-added element")
+- }
+-
+- if !s.Has(node(3)) || !s.Has(node(5)) {
+- t.Error("Set removes element on double-add")
+- }
+-
+- for e, n := range s {
+- if e != n.ID() {
+- t.Error("Element ID did not match key: %d != %d", e, n.ID())
+- }
+- }
+-}
+-
+-func TestRemove(t *testing.T) {
+- s := make(Set)
+-
+- s.Add(node(1))
+- s.Add(node(3))
+- s.Add(node(5))
+-
+- s.Remove(node(1))
+-
+- if s.count() != 2 {
+- t.Error("Incorrect number of set elements after removing an element")
+- }
+-
+- if s.Has(node(1)) {
+- t.Error("Element present after removal")
+- }
+-
+- if !s.Has(node(3)) || !s.Has(node(5)) {
+- t.Error("Set remove removed wrong element")
+- }
+-
+- s.Remove(node(1))
+-
+- if s.count() != 2 || s.Has(node(1)) {
+- t.Error("Double set remove does something strange")
+- }
+-
+- s.Add(node(1))
+-
+- if s.count() != 3 || !s.Has(node(1)) {
+- t.Error("Cannot add element after removal")
+- }
+-}
+-
+-func TestClear(t *testing.T) {
+- s := make(Set)
+-
+- s.Add(node(8))
+- s.Add(node(9))
+- s.Add(node(10))
+-
+- s = Clear(s)
+-
+- if s.count() != 0 {
+- t.Error("Clear did not properly reset set to size 0")
+- }
+-}
+-
+-func TestSelfEqual(t *testing.T) {
+- s := make(Set)
+-
+- if !Equal(s, s) {
+- t.Error("Set is not equal to itself")
+- }
+-
+- s.Add(node(1))
+-
+- if !Equal(s, s) {
+- t.Error("Set ceases self equality after adding element")
+- }
+-}
+-
+-func TestEqual(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+-
+- if !Equal(s1, s2) {
+- t.Error("Two different empty sets not equal")
+- }
+-
+- s1.Add(node(1))
+- if Equal(s1, s2) {
+- t.Error("Two different sets with different elements not equal")
+- }
+-
+- s2.Add(node(1))
+- if !Equal(s1, s2) {
+- t.Error("Two sets with same element not equal")
+- }
+-}
+-
+-func TestCopy(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+-
+- s1.Add(node(1))
+- s1.Add(node(2))
+- s1.Add(node(3))
+-
+- s2.Copy(s1)
+-
+- if !Equal(s1, s2) {
+- t.Fatalf("Two sets not equal after copy")
+- }
+-
+- s2.Remove(node(1))
+-
+- if Equal(s1, s2) {
+- t.Errorf("Mutating one set mutated another after copy")
+- }
+-}
+-
+-func TestSelfCopy(t *testing.T) {
+- s1 := make(Set)
+-
+- s1.Add(node(1))
+- s1.Add(node(2))
+-
+- s1.Copy(s1)
+-
+- if s1.count() != 2 {
+- t.Error("Something strange happened when copying into self")
+- }
+-}
+-
+-func TestUnionSame(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+- s3 := make(Set)
+-
+- s1.Add(node(1))
+- s1.Add(node(2))
+-
+- s2.Add(node(1))
+- s2.Add(node(2))
+-
+- s3.Union(s1, s2)
+-
+- if s3.count() != 2 {
+- t.Error("Union of same sets yields set with wrong len")
+- }
+-
+- if !s3.Has(node(1)) || !s3.Has(node(2)) {
+- t.Error("Union of same sets yields wrong elements")
+- }
+-
+- for i, s := range []Set{s1, s2, s3} {
+- for e, n := range s {
+- if e != n.ID() {
+- t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
+- }
+- }
+- }
+-}
+-
+-func TestUnionDiff(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+- s3 := make(Set)
+-
+- s1.Add(node(1))
+- s1.Add(node(2))
+-
+- s2.Add(node(3))
+-
+- s3.Union(s1, s2)
+-
+- if s3.count() != 3 {
+- t.Error("Union of different sets yields set with wrong len")
+- }
+-
+- if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
+- t.Error("Union of different sets yields set with wrong elements")
+- }
+-
+- if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
+- t.Error("Union of sets mutates non-destination set (argument 1)")
+- }
+-
+- if !s2.Has(node(3)) || s2.Has(node(1)) || s2.Has(node(2)) || s2.count() != 1 {
+- t.Error("Union of sets mutates non-destination set (argument 2)")
+- }
+-
+- for i, s := range []Set{s1, s2, s3} {
+- for e, n := range s {
+- if e != n.ID() {
+- t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
+- }
+- }
+- }
+-}
+-
+-func TestUnionOverlapping(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+- s3 := make(Set)
+-
+- s1.Add(node(1))
+- s1.Add(node(2))
+-
+- s2.Add(node(2))
+- s2.Add(node(3))
+-
+- s3.Union(s1, s2)
+-
+- if s3.count() != 3 {
+- t.Error("Union of overlapping sets yields set with wrong len")
+- }
+-
+- if !s3.Has(node(1)) || !s3.Has(node(2)) || !s3.Has(node(3)) {
+- t.Error("Union of overlapping sets yields set with wrong elements")
+- }
+-
+- if s1.Has(node(3)) || !s1.Has(node(2)) || !s1.Has(node(1)) || s1.count() != 2 {
+- t.Error("Union of sets mutates non-destination set (argument 1)")
+- }
+-
+- if !s2.Has(node(3)) || s2.Has(node(1)) || !s2.Has(node(2)) || s2.count() != 2 {
+- t.Error("Union of sets mutates non-destination set (argument 2)")
+- }
+-
+- for i, s := range []Set{s1, s2, s3} {
+- for e, n := range s {
+- if e != n.ID() {
+- t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
+- }
+- }
+- }
+-}
+-
+-func TestIntersectSame(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+- s3 := make(Set)
+-
+- s1.Add(node(2))
+- s1.Add(node(3))
+-
+- s2.Add(node(2))
+- s2.Add(node(3))
+-
+- s3.Intersect(s1, s2)
+-
+- if card := s3.count(); card != 2 {
+- t.Errorf("Intersection of identical sets yields set of wrong len %d", card)
+- }
+-
+- if !s3.Has(node(2)) || !s3.Has(node(3)) {
+- t.Error("Intersection of identical sets yields set of wrong elements")
+- }
+-
+- for i, s := range []Set{s1, s2, s3} {
+- for e, n := range s {
+- if e != n.ID() {
+- t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
+- }
+- }
+- }
+-}
+-
+-func TestIntersectDiff(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+- s3 := make(Set)
+-
+- s1.Add(node(2))
+- s1.Add(node(3))
+-
+- s2.Add(node(1))
+- s2.Add(node(4))
+-
+- s3.Intersect(s1, s2)
+-
+- if card := s3.count(); card != 0 {
+- t.Errorf("Intersection of different yields non-empty set %d", card)
+- }
+-
+- if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(1)) || s1.Has(node(4)) || s1.count() != 2 {
+- t.Error("Intersection of sets mutates non-destination set (argument 1)")
+- }
+-
+- if s2.Has(node(2)) || s2.Has(node(3)) || !s2.Has(node(1)) || !s2.Has(node(4)) || s2.count() != 2 {
+- t.Error("Intersection of sets mutates non-destination set (argument 1)")
+- }
+-
+- for i, s := range []Set{s1, s2, s3} {
+- for e, n := range s {
+- if e != n.ID() {
+- t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
+- }
+- }
+- }
+-}
+-
+-func TestIntersectOverlapping(t *testing.T) {
+- s1 := make(Set)
+- s2 := make(Set)
+- s3 := make(Set)
+-
+- s1.Add(node(2))
+- s1.Add(node(3))
+-
+- s2.Add(node(3))
+- s2.Add(node(4))
+-
+- s3.Intersect(s1, s2)
+-
+- if card := s3.count(); card != 1 {
+- t.Errorf("Intersection of overlapping sets yields set of incorrect len %d", card)
+- }
+-
+- if !s3.Has(node(3)) {
+- t.Errorf("Intersection of overlapping sets yields set with wrong element")
+- }
+-
+- if !s1.Has(node(2)) || !s1.Has(node(3)) || s1.Has(node(4)) || s1.count() != 2 {
+- t.Error("Intersection of sets mutates non-destination set (argument 1)")
+- }
+-
+- if s2.Has(node(2)) || !s2.Has(node(3)) || !s2.Has(node(4)) || s2.count() != 2 {
+- t.Error("Intersection of sets mutates non-destination set (argument 1)")
+- }
+-
+- for i, s := range []Set{s1, s2, s3} {
+- for e, n := range s {
+- if e != n.ID() {
+- t.Error("Element ID did not match key in s%d: %d != %d", i+1, e, n.ID())
+- }
+- }
+- }
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go b/Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go
+deleted file mode 100644
+index 3bfee0f..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/graph/internal/sort.go
++++ /dev/null
+@@ -1,28 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package internal
+-
+-// BySliceValues implements the sort.Interface sorting a slice of
+-// []int lexically by the values of the []int.
+-type BySliceValues [][]int
+-
+-func (c BySliceValues) Len() int { return len(c) }
+-func (c BySliceValues) Less(i, j int) bool {
+- a, b := c[i], c[j]
+- l := len(a)
+- if len(b) < l {
+- l = len(b)
+- }
+- for k, v := range a[:l] {
+- if v < b[k] {
+- return true
+- }
+- if v > b[k] {
+- return false
+- }
+- }
+- return len(a) < len(b)
+-}
+-func (c BySliceValues) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go b/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go
+index ad16732..dbe216e 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/network/betweenness.go
+@@ -8,7 +8,7 @@ import (
+ "math"
+
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/path"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go b/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go
+index b41d194..d742cff 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/path/a_star.go
+@@ -8,7 +8,7 @@ import (
+ "container/heap"
+
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ )
+
+ // Heuristic returns an estimate of the cost of travelling between two nodes.
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go b/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go
+index 219226d..9bebf2c 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/path/control_flow.go
+@@ -6,7 +6,7 @@ package path
+
+ import (
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ )
+
+ // PostDominatores returns all dominators for all nodes in g. It does not
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go b/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go
+index c22d28f..0526ba9 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/path/dijkstra_test.go
+@@ -11,7 +11,7 @@ import (
+ "testing"
+
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/path"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go b/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go
+index ea78e79..d23bb6a 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/path/floydwarshall_test.go
+@@ -11,7 +11,7 @@ import (
+ "testing"
+
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/path"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go b/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go
+index 814000f..588581d 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/path/johnson_apsp_test.go
+@@ -11,7 +11,7 @@ import (
+ "testing"
+
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/path"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go b/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go
+index 99b30cb..2e3a501 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/path/spanning_tree.go
+@@ -9,7 +9,7 @@ import (
+
+ "github.com/gonum/graph"
+ "github.com/gonum/graph/concrete"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ )
+
+ // EdgeListerGraph is an undirected graph than returns its complete set of edges.
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go
+index 5e30d5b..a012b9b 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch.go
+@@ -6,7 +6,7 @@ package topo
+
+ import (
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ )
+
+ // VertexOrdering returns the vertex ordering and the k-cores of
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go
+index 3d22c36..73e303c 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/bron_kerbosch_test.go
+@@ -10,7 +10,7 @@ import (
+ "testing"
+
+ "github.com/gonum/graph/concrete"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/topo"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go
+index 36d4cbd..ce9318e 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles.go
+@@ -8,7 +8,7 @@ import (
+ "sort"
+
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ )
+
+ // johnson implements Johnson's "Finding all the elementary
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go
+index a1ee6e1..149fff2 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/johnson_cycles_test.go
+@@ -10,7 +10,7 @@ import (
+ "testing"
+
+ "github.com/gonum/graph/concrete"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/topo"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go
+index 908358c..f779bbb 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan.go
+@@ -9,7 +9,7 @@ import (
+ "sort"
+
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ )
+
+ // Unorderable is an error containing sets of unorderable graph.Nodes.
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go
+index 504633f..63c1a82 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/tarjan_test.go
+@@ -10,7 +10,7 @@ import (
+ "testing"
+
+ "github.com/gonum/graph/concrete"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/topo"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go b/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go
+index d903ee1..d71b788 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/topo/topo_test.go
+@@ -11,7 +11,7 @@ import (
+
+ "github.com/gonum/graph"
+ "github.com/gonum/graph/concrete"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/topo"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go
+index bb0fdad..a7eb54d 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse.go
+@@ -7,7 +7,7 @@ package traverse
+
+ import (
+ "github.com/gonum/graph"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ )
+
+ // BreadthFirst implements stateful breadth-first graph traversal.
+diff --git a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go
+index c5a4e2a..b771b46 100644
+--- a/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go
++++ b/Godeps/_workspace/src/github.com/gonum/graph/traverse/traverse_test.go
+@@ -12,7 +12,7 @@ import (
+
+ "github.com/gonum/graph"
+ "github.com/gonum/graph/concrete"
+- "github.com/gonum/graph/internal"
++ "github.com/gonum/graph/inteernal"
+ "github.com/gonum/graph/traverse"
+ )
+
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go
+new file mode 100644
+index 0000000..80d802a
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/caxpy.go
+@@ -0,0 +1,22 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++// The extra z parameter is needed because of floats.AddScaledTo
++func CaxpyUnitary(alpha complex64, x, y, z []complex64) {
++ for i, v := range x {
++ z[i] = alpha*v + y[i]
++ }
++}
++
++func CaxpyInc(alpha complex64, x, y []complex64, n, incX, incY, ix, iy uintptr) {
++ for i := 0; i < int(n); i++ {
++ y[iy] += alpha * x[ix]
++ ix += incX
++ iy += incY
++ }
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go
+new file mode 100644
+index 0000000..ed999e5
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotc.go
+@@ -0,0 +1,23 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++func CdotcUnitary(x, y []complex64) (sum complex64) {
++ for i, v := range x {
++ sum += y[i] * conj(v)
++ }
++ return
++}
++
++func CdotcInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
++ for i := 0; i < int(n); i++ {
++ sum += y[iy] * conj(x[ix])
++ ix += incX
++ iy += incY
++ }
++ return
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go
+new file mode 100644
+index 0000000..3392ee2
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/cdotu.go
+@@ -0,0 +1,23 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++func CdotuUnitary(x, y []complex64) (sum complex64) {
++ for i, v := range x {
++ sum += y[i] * v
++ }
++ return
++}
++
++func CdotuInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
++ for i := 0; i < int(n); i++ {
++ sum += y[iy] * x[ix]
++ ix += incX
++ iy += incY
++ }
++ return
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex
+new file mode 100644
+index 0000000..b26e4e6
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/complex
+@@ -0,0 +1,58 @@
++#!/usr/bin/env bash
++
++# Copyright ©2015 The gonum Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style
++# license that can be found in the LICENSE file.
++
++echo Generating zdotu.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotu.go
++cat ddot.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> complex128' \
++| sed 's/Ddot/Zdotu/' \
++>> zdotu.go
++
++echo Generating zdotc.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotc.go
++cat ddot.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> complex128' \
++| gofmt -r 'y[i] * v -> y[i] * cmplx.Conj(v)' \
++| sed 's/Ddot/Zdotc/' \
++| goimports \
++>> zdotc.go
++
++echo Generating zaxpy.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > zaxpy.go
++cat daxpy.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> complex128' \
++| sed 's/Daxpy/Zaxpy/' \
++>> zaxpy.go
++
++echo Generating cdotu.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotu.go
++cat ddot.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> complex64' \
++| sed 's/Ddot/Cdotu/' \
++>> cdotu.go
++
++echo Generating cdotc.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotc.go
++cat ddot.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> complex64' \
++| gofmt -r 'y[i] * v -> y[i] * conj(v)' \
++| sed 's/Ddot/Cdotc/' \
++| goimports \
++>> cdotc.go
++
++echo Generating caxpy.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > caxpy.go
++cat daxpy.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> complex64' \
++| sed 's/Daxpy/Caxpy/' \
++>> caxpy.go
++
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go
+new file mode 100644
+index 0000000..1cadb2a
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/conj.go
+@@ -0,0 +1,7 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++func conj(c complex64) complex64 { return complex(real(c), -imag(c)) }
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go
+new file mode 100644
+index 0000000..24979fc
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy.go
+@@ -0,0 +1,22 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++//+build !amd64 noasm
++
++package asm
++
++// The extra z parameter is needed because of floats.AddScaledTo
++func DaxpyUnitary(alpha float64, x, y, z []float64) {
++ for i, v := range x {
++ z[i] = alpha*v + y[i]
++ }
++}
++
++func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr) {
++ for i := 0; i < int(n); i++ {
++ y[iy] += alpha * x[ix]
++ ix += incX
++ iy += incY
++ }
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go
+new file mode 100644
+index 0000000..d1aeacf
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.go
+@@ -0,0 +1,12 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++//+build !noasm
++
++package asm
++
++// The extra z parameter is needed because of floats.AddScaledTo
++func DaxpyUnitary(alpha float64, x, y, z []float64)
++
++func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s
+new file mode 100644
+index 0000000..18f2d3c
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/daxpy_amd64.s
+@@ -0,0 +1,140 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++//
++// Some of the loop unrolling code is copied from:
++// http://golang.org/src/math/big/arith_amd64.s
++// which is distributed under these terms:
++//
++// Copyright (c) 2012 The Go Authors. All rights reserved.
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++// * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++// * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++// * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++//+build !noasm
++
++// TODO(fhs): use textflag.h after we drop Go 1.3 support
++//#include "textflag.h"
++// Don't insert stack check preamble.
++#define NOSPLIT 4
++
++
++// func DaxpyUnitary(alpha float64, x, y, z []float64)
++// This function assumes len(y) >= len(x).
++TEXT ·DaxpyUnitary(SB),NOSPLIT,$0
++ MOVHPD alpha+0(FP), X7
++ MOVLPD alpha+0(FP), X7
++ MOVQ x_len+16(FP), DI // n = len(x)
++ MOVQ x+8(FP), R8
++ MOVQ y+32(FP), R9
++ MOVQ z+56(FP), R10
++
++ MOVQ $0, SI // i = 0
++ SUBQ $2, DI // n -= 2
++ JL V1 // if n < 0 goto V1
++
++U1: // n >= 0
++ // y[i] += alpha * x[i] unrolled 2x.
++ MOVUPD 0(R8)(SI*8), X0
++ MOVUPD 0(R9)(SI*8), X1
++ MULPD X7, X0
++ ADDPD X0, X1
++ MOVUPD X1, 0(R10)(SI*8)
++
++ ADDQ $2, SI // i += 2
++ SUBQ $2, DI // n -= 2
++ JGE U1 // if n >= 0 goto U1
++
++V1:
++ ADDQ $2, DI // n += 2
++ JLE E1 // if n <= 0 goto E1
++
++ // y[i] += alpha * x[i] for last iteration if n is odd.
++ MOVSD 0(R8)(SI*8), X0
++ MOVSD 0(R9)(SI*8), X1
++ MULSD X7, X0
++ ADDSD X0, X1
++ MOVSD X1, 0(R10)(SI*8)
++
++E1:
++ RET
++
++
++// func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
++TEXT ·DaxpyInc(SB),NOSPLIT,$0
++ MOVHPD alpha+0(FP), X7
++ MOVLPD alpha+0(FP), X7
++ MOVQ x+8(FP), R8
++ MOVQ y+32(FP), R9
++ MOVQ n+56(FP), CX
++ MOVQ incX+64(FP), R11
++ MOVQ incY+72(FP), R12
++ MOVQ ix+80(FP), SI
++ MOVQ iy+88(FP), DI
++
++ MOVQ SI, AX // nextX = ix
++ MOVQ DI, BX // nextY = iy
++ ADDQ R11, AX // nextX += incX
++ ADDQ R12, BX // nextY += incX
++ SHLQ $1, R11 // indX *= 2
++ SHLQ $1, R12 // indY *= 2
++
++ SUBQ $2, CX // n -= 2
++ JL V2 // if n < 0 goto V2
++
++U2: // n >= 0
++ // y[i] += alpha * x[i] unrolled 2x.
++ MOVHPD 0(R8)(SI*8), X0
++ MOVHPD 0(R9)(DI*8), X1
++ MOVLPD 0(R8)(AX*8), X0
++ MOVLPD 0(R9)(BX*8), X1
++
++ MULPD X7, X0
++ ADDPD X0, X1
++ MOVHPD X1, 0(R9)(DI*8)
++ MOVLPD X1, 0(R9)(BX*8)
++
++ ADDQ R11, SI // ix += incX
++ ADDQ R12, DI // iy += incY
++ ADDQ R11, AX // nextX += incX
++ ADDQ R12, BX // nextY += incY
++
++ SUBQ $2, CX // n -= 2
++ JGE U2 // if n >= 0 goto U2
++
++V2:
++ ADDQ $2, CX // n += 2
++ JLE E2 // if n <= 0 goto E2
++
++ // y[i] += alpha * x[i] for the last iteration if n is odd.
++ MOVSD 0(R8)(SI*8), X0
++ MOVSD 0(R9)(DI*8), X1
++ MULSD X7, X0
++ ADDSD X0, X1
++ MOVSD X1, 0(R9)(DI*8)
++
++E2:
++ RET
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go
+new file mode 100644
+index 0000000..7e69957
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot.go
+@@ -0,0 +1,23 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++//+build !amd64 noasm
++
++package asm
++
++func DdotUnitary(x, y []float64) (sum float64) {
++ for i, v := range x {
++ sum += y[i] * v
++ }
++ return
++}
++
++func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64) {
++ for i := 0; i < int(n); i++ {
++ sum += y[iy] * x[ix]
++ ix += incX
++ iy += incY
++ }
++ return
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go
+new file mode 100644
+index 0000000..7fa634a
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.go
+@@ -0,0 +1,10 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++//+build !noasm
++
++package asm
++
++func DdotUnitary(x, y []float64) (sum float64)
++func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s
+new file mode 100644
+index 0000000..a898bbb
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/ddot_amd64.s
+@@ -0,0 +1,140 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++//
++// Some of the loop unrolling code is copied from:
++// http://golang.org/src/math/big/arith_amd64.s
++// which is distributed under these terms:
++//
++// Copyright (c) 2012 The Go Authors. All rights reserved.
++//
++// Redistribution and use in source and binary forms, with or without
++// modification, are permitted provided that the following conditions are
++// met:
++//
++// * Redistributions of source code must retain the above copyright
++// notice, this list of conditions and the following disclaimer.
++// * Redistributions in binary form must reproduce the above
++// copyright notice, this list of conditions and the following disclaimer
++// in the documentation and/or other materials provided with the
++// distribution.
++// * Neither the name of Google Inc. nor the names of its
++// contributors may be used to endorse or promote products derived from
++// this software without specific prior written permission.
++//
++// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
++// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
++// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
++// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++
++//+build !noasm
++
++// TODO(fhs): use textflag.h after we drop Go 1.3 support
++//#include "textflag.h"
++// Don't insert stack check preamble.
++#define NOSPLIT 4
++
++
++// func DdotUnitary(x, y []float64) (sum float64)
++// This function assumes len(y) >= len(x).
++TEXT ·DdotUnitary(SB),NOSPLIT,$0
++ MOVQ x_len+8(FP), DI // n = len(x)
++ MOVQ x+0(FP), R8
++ MOVQ y+24(FP), R9
++
++ MOVQ $0, SI // i = 0
++ MOVSD $(0.0), X7 // sum = 0
++
++ SUBQ $2, DI // n -= 2
++ JL V1 // if n < 0 goto V1
++
++U1: // n >= 0
++ // sum += x[i] * y[i] unrolled 2x.
++ MOVUPD 0(R8)(SI*8), X0
++ MOVUPD 0(R9)(SI*8), X1
++ MULPD X1, X0
++ ADDPD X0, X7
++
++ ADDQ $2, SI // i += 2
++ SUBQ $2, DI // n -= 2
++ JGE U1 // if n >= 0 goto U1
++
++V1: // n > 0
++ ADDQ $2, DI // n += 2
++ JLE E1 // if n <= 0 goto E1
++
++ // sum += x[i] * y[i] for last iteration if n is odd.
++ MOVSD 0(R8)(SI*8), X0
++ MOVSD 0(R9)(SI*8), X1
++ MULSD X1, X0
++ ADDSD X0, X7
++
++E1:
++ // Add the two sums together.
++ MOVSD X7, X0
++ UNPCKHPD X7, X7
++ ADDSD X0, X7
++ MOVSD X7, sum+48(FP) // return final sum
++ RET
++
++
++// func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
++TEXT ·DdotInc(SB),NOSPLIT,$0
++ MOVQ x+0(FP), R8
++ MOVQ y+24(FP), R9
++ MOVQ n+48(FP), CX
++ MOVQ incX+56(FP), R11
++ MOVQ incY+64(FP), R12
++ MOVQ ix+72(FP), R13
++ MOVQ iy+80(FP), R14
++
++ MOVSD $(0.0), X7 // sum = 0
++ LEAQ (R8)(R13*8), SI // p = &x[ix]
++ LEAQ (R9)(R14*8), DI // q = &y[ix]
++ SHLQ $3, R11 // incX *= sizeof(float64)
++ SHLQ $3, R12 // indY *= sizeof(float64)
++
++ SUBQ $2, CX // n -= 2
++ JL V2 // if n < 0 goto V2
++
++U2: // n >= 0
++ // sum += *p * *q unrolled 2x.
++ MOVHPD (SI), X0
++ MOVHPD (DI), X1
++ ADDQ R11, SI // p += incX
++ ADDQ R12, DI // q += incY
++ MOVLPD (SI), X0
++ MOVLPD (DI), X1
++ ADDQ R11, SI // p += incX
++ ADDQ R12, DI // q += incY
++
++ MULPD X1, X0
++ ADDPD X0, X7
++
++ SUBQ $2, CX // n -= 2
++ JGE U2 // if n >= 0 goto U2
++
++V2:
++ ADDQ $2, CX // n += 2
++ JLE E2 // if n <= 0 goto E2
++
++ // sum += *p * *q for the last iteration if n is odd.
++ MOVSD (SI), X0
++ MULSD (DI), X0
++ ADDSD X0, X7
++
++E2:
++ // Add the two sums together.
++ MOVSD X7, X0
++ UNPCKHPD X7, X7
++ ADDSD X0, X7
++ MOVSD X7, sum+88(FP) // return final sum
++ RET
++
+\ No newline at end of file
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go
+new file mode 100644
+index 0000000..8450689
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/dsdot.go
+@@ -0,0 +1,23 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++func DsdotUnitary(x, y []float32) (sum float64) {
++ for i, v := range x {
++ sum += float64(y[i]) * float64(v)
++ }
++ return
++}
++
++func DsdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float64) {
++ for i := 0; i < int(n); i++ {
++ sum += float64(y[iy]) * float64(x[ix])
++ ix += incX
++ iy += incY
++ }
++ return
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go
+new file mode 100644
+index 0000000..e252140
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/generate.go
+@@ -0,0 +1,8 @@
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++//go:generate ./single_precision
++//go:generate ./complex
++
++package asm
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go
+new file mode 100644
+index 0000000..3ef767f
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/saxpy.go
+@@ -0,0 +1,22 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++// The extra z parameter is needed because of floats.AddScaledTo
++func SaxpyUnitary(alpha float32, x, y, z []float32) {
++ for i, v := range x {
++ z[i] = alpha*v + y[i]
++ }
++}
++
++func SaxpyInc(alpha float32, x, y []float32, n, incX, incY, ix, iy uintptr) {
++ for i := 0; i < int(n); i++ {
++ y[iy] += alpha * x[ix]
++ ix += incX
++ iy += incY
++ }
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go
+new file mode 100644
+index 0000000..0cef5de
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/sdot.go
+@@ -0,0 +1,23 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++func SdotUnitary(x, y []float32) (sum float32) {
++ for i, v := range x {
++ sum += y[i] * v
++ }
++ return
++}
++
++func SdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float32) {
++ for i := 0; i < int(n); i++ {
++ sum += y[iy] * x[ix]
++ ix += incX
++ iy += incY
++ }
++ return
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision
+new file mode 100644
+index 0000000..a937a97
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/single_precision
+@@ -0,0 +1,30 @@
++#!/usr/bin/env bash
++
++# Copyright ©2015 The gonum Authors. All rights reserved.
++# Use of this source code is governed by a BSD-style
++# license that can be found in the LICENSE file.
++
++echo Generating dsdot.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > dsdot.go
++cat ddot.go \
++| grep -v '//+build' \
++| gofmt -r '[]float64 -> []float32' \
++| gofmt -r 'a * b -> float64(a) * float64(b)' \
++| sed 's/Ddot/Dsdot/' \
++>> dsdot.go
++
++echo Generating sdot.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > sdot.go
++cat ddot.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> float32' \
++| sed 's/Ddot/Sdot/' \
++>> sdot.go
++
++echo Generating saxpy.go
++echo -e '// Generated code do not edit. Run `go generate`.\n' > saxpy.go
++cat daxpy.go \
++| grep -v '//+build' \
++| gofmt -r 'float64 -> float32' \
++| sed 's/Daxpy/Saxpy/' \
++>> saxpy.go
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go
+new file mode 100644
+index 0000000..9478f25
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zaxpy.go
+@@ -0,0 +1,22 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++// The extra z parameter is needed because of floats.AddScaledTo
++func ZaxpyUnitary(alpha complex128, x, y, z []complex128) {
++ for i, v := range x {
++ z[i] = alpha*v + y[i]
++ }
++}
++
++func ZaxpyInc(alpha complex128, x, y []complex128, n, incX, incY, ix, iy uintptr) {
++ for i := 0; i < int(n); i++ {
++ y[iy] += alpha * x[ix]
++ ix += incX
++ iy += incY
++ }
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go
+new file mode 100644
+index 0000000..7b8febc
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotc.go
+@@ -0,0 +1,25 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++import "math/cmplx"
++
++func ZdotcUnitary(x, y []complex128) (sum complex128) {
++ for i, v := range x {
++ sum += y[i] * cmplx.Conj(v)
++ }
++ return
++}
++
++func ZdotcInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
++ for i := 0; i < int(n); i++ {
++ sum += y[iy] * cmplx.Conj(x[ix])
++ ix += incX
++ iy += incY
++ }
++ return
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go
+new file mode 100644
+index 0000000..82c1fe2
+--- /dev/null
++++ b/Godeps/_workspace/src/github.com/gonum/inteernal/asm/zdotu.go
+@@ -0,0 +1,23 @@
++// Generated code do not edit. Run `go generate`.
++
++// Copyright ©2015 The gonum Authors. All rights reserved.
++// Use of this source code is governed by a BSD-style
++// license that can be found in the LICENSE file.
++
++package asm
++
++func ZdotuUnitary(x, y []complex128) (sum complex128) {
++ for i, v := range x {
++ sum += y[i] * v
++ }
++ return
++}
++
++func ZdotuInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
++ for i := 0; i < int(n); i++ {
++ sum += y[iy] * x[ix]
++ ix += incX
++ iy += incY
++ }
++ return
++}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go
+deleted file mode 100644
+index 80d802a..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/caxpy.go
++++ /dev/null
+@@ -1,22 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-// The extra z parameter is needed because of floats.AddScaledTo
+-func CaxpyUnitary(alpha complex64, x, y, z []complex64) {
+- for i, v := range x {
+- z[i] = alpha*v + y[i]
+- }
+-}
+-
+-func CaxpyInc(alpha complex64, x, y []complex64, n, incX, incY, ix, iy uintptr) {
+- for i := 0; i < int(n); i++ {
+- y[iy] += alpha * x[ix]
+- ix += incX
+- iy += incY
+- }
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go
+deleted file mode 100644
+index ed999e5..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotc.go
++++ /dev/null
+@@ -1,23 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-func CdotcUnitary(x, y []complex64) (sum complex64) {
+- for i, v := range x {
+- sum += y[i] * conj(v)
+- }
+- return
+-}
+-
+-func CdotcInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
+- for i := 0; i < int(n); i++ {
+- sum += y[iy] * conj(x[ix])
+- ix += incX
+- iy += incY
+- }
+- return
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go
+deleted file mode 100644
+index 3392ee2..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/cdotu.go
++++ /dev/null
+@@ -1,23 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-func CdotuUnitary(x, y []complex64) (sum complex64) {
+- for i, v := range x {
+- sum += y[i] * v
+- }
+- return
+-}
+-
+-func CdotuInc(x, y []complex64, n, incX, incY, ix, iy uintptr) (sum complex64) {
+- for i := 0; i < int(n); i++ {
+- sum += y[iy] * x[ix]
+- ix += incX
+- iy += incY
+- }
+- return
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/complex b/Godeps/_workspace/src/github.com/gonum/internal/asm/complex
+deleted file mode 100644
+index b26e4e6..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/complex
++++ /dev/null
+@@ -1,58 +0,0 @@
+-#!/usr/bin/env bash
+-
+-# Copyright ©2015 The gonum Authors. All rights reserved.
+-# Use of this source code is governed by a BSD-style
+-# license that can be found in the LICENSE file.
+-
+-echo Generating zdotu.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotu.go
+-cat ddot.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> complex128' \
+-| sed 's/Ddot/Zdotu/' \
+->> zdotu.go
+-
+-echo Generating zdotc.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > zdotc.go
+-cat ddot.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> complex128' \
+-| gofmt -r 'y[i] * v -> y[i] * cmplx.Conj(v)' \
+-| sed 's/Ddot/Zdotc/' \
+-| goimports \
+->> zdotc.go
+-
+-echo Generating zaxpy.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > zaxpy.go
+-cat daxpy.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> complex128' \
+-| sed 's/Daxpy/Zaxpy/' \
+->> zaxpy.go
+-
+-echo Generating cdotu.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotu.go
+-cat ddot.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> complex64' \
+-| sed 's/Ddot/Cdotu/' \
+->> cdotu.go
+-
+-echo Generating cdotc.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > cdotc.go
+-cat ddot.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> complex64' \
+-| gofmt -r 'y[i] * v -> y[i] * conj(v)' \
+-| sed 's/Ddot/Cdotc/' \
+-| goimports \
+->> cdotc.go
+-
+-echo Generating caxpy.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > caxpy.go
+-cat daxpy.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> complex64' \
+-| sed 's/Daxpy/Caxpy/' \
+->> caxpy.go
+-
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go
+deleted file mode 100644
+index 1cadb2a..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/conj.go
++++ /dev/null
+@@ -1,7 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-func conj(c complex64) complex64 { return complex(real(c), -imag(c)) }
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go
+deleted file mode 100644
+index 24979fc..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy.go
++++ /dev/null
+@@ -1,22 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-//+build !amd64 noasm
+-
+-package asm
+-
+-// The extra z parameter is needed because of floats.AddScaledTo
+-func DaxpyUnitary(alpha float64, x, y, z []float64) {
+- for i, v := range x {
+- z[i] = alpha*v + y[i]
+- }
+-}
+-
+-func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr) {
+- for i := 0; i < int(n); i++ {
+- y[iy] += alpha * x[ix]
+- ix += incX
+- iy += incY
+- }
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go
+deleted file mode 100644
+index d1aeacf..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.go
++++ /dev/null
+@@ -1,12 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-//+build !noasm
+-
+-package asm
+-
+-// The extra z parameter is needed because of floats.AddScaledTo
+-func DaxpyUnitary(alpha float64, x, y, z []float64)
+-
+-func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s b/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s
+deleted file mode 100644
+index 18f2d3c..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/daxpy_amd64.s
++++ /dev/null
+@@ -1,140 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-//
+-// Some of the loop unrolling code is copied from:
+-// http://golang.org/src/math/big/arith_amd64.s
+-// which is distributed under these terms:
+-//
+-// Copyright (c) 2012 The Go Authors. All rights reserved.
+-//
+-// Redistribution and use in source and binary forms, with or without
+-// modification, are permitted provided that the following conditions are
+-// met:
+-//
+-// * Redistributions of source code must retain the above copyright
+-// notice, this list of conditions and the following disclaimer.
+-// * Redistributions in binary form must reproduce the above
+-// copyright notice, this list of conditions and the following disclaimer
+-// in the documentation and/or other materials provided with the
+-// distribution.
+-// * Neither the name of Google Inc. nor the names of its
+-// contributors may be used to endorse or promote products derived from
+-// this software without specific prior written permission.
+-//
+-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-
+-//+build !noasm
+-
+-// TODO(fhs): use textflag.h after we drop Go 1.3 support
+-//#include "textflag.h"
+-// Don't insert stack check preamble.
+-#define NOSPLIT 4
+-
+-
+-// func DaxpyUnitary(alpha float64, x, y, z []float64)
+-// This function assumes len(y) >= len(x).
+-TEXT ·DaxpyUnitary(SB),NOSPLIT,$0
+- MOVHPD alpha+0(FP), X7
+- MOVLPD alpha+0(FP), X7
+- MOVQ x_len+16(FP), DI // n = len(x)
+- MOVQ x+8(FP), R8
+- MOVQ y+32(FP), R9
+- MOVQ z+56(FP), R10
+-
+- MOVQ $0, SI // i = 0
+- SUBQ $2, DI // n -= 2
+- JL V1 // if n < 0 goto V1
+-
+-U1: // n >= 0
+- // y[i] += alpha * x[i] unrolled 2x.
+- MOVUPD 0(R8)(SI*8), X0
+- MOVUPD 0(R9)(SI*8), X1
+- MULPD X7, X0
+- ADDPD X0, X1
+- MOVUPD X1, 0(R10)(SI*8)
+-
+- ADDQ $2, SI // i += 2
+- SUBQ $2, DI // n -= 2
+- JGE U1 // if n >= 0 goto U1
+-
+-V1:
+- ADDQ $2, DI // n += 2
+- JLE E1 // if n <= 0 goto E1
+-
+- // y[i] += alpha * x[i] for last iteration if n is odd.
+- MOVSD 0(R8)(SI*8), X0
+- MOVSD 0(R9)(SI*8), X1
+- MULSD X7, X0
+- ADDSD X0, X1
+- MOVSD X1, 0(R10)(SI*8)
+-
+-E1:
+- RET
+-
+-
+-// func DaxpyInc(alpha float64, x, y []float64, n, incX, incY, ix, iy uintptr)
+-TEXT ·DaxpyInc(SB),NOSPLIT,$0
+- MOVHPD alpha+0(FP), X7
+- MOVLPD alpha+0(FP), X7
+- MOVQ x+8(FP), R8
+- MOVQ y+32(FP), R9
+- MOVQ n+56(FP), CX
+- MOVQ incX+64(FP), R11
+- MOVQ incY+72(FP), R12
+- MOVQ ix+80(FP), SI
+- MOVQ iy+88(FP), DI
+-
+- MOVQ SI, AX // nextX = ix
+- MOVQ DI, BX // nextY = iy
+- ADDQ R11, AX // nextX += incX
+- ADDQ R12, BX // nextY += incX
+- SHLQ $1, R11 // indX *= 2
+- SHLQ $1, R12 // indY *= 2
+-
+- SUBQ $2, CX // n -= 2
+- JL V2 // if n < 0 goto V2
+-
+-U2: // n >= 0
+- // y[i] += alpha * x[i] unrolled 2x.
+- MOVHPD 0(R8)(SI*8), X0
+- MOVHPD 0(R9)(DI*8), X1
+- MOVLPD 0(R8)(AX*8), X0
+- MOVLPD 0(R9)(BX*8), X1
+-
+- MULPD X7, X0
+- ADDPD X0, X1
+- MOVHPD X1, 0(R9)(DI*8)
+- MOVLPD X1, 0(R9)(BX*8)
+-
+- ADDQ R11, SI // ix += incX
+- ADDQ R12, DI // iy += incY
+- ADDQ R11, AX // nextX += incX
+- ADDQ R12, BX // nextY += incY
+-
+- SUBQ $2, CX // n -= 2
+- JGE U2 // if n >= 0 goto U2
+-
+-V2:
+- ADDQ $2, CX // n += 2
+- JLE E2 // if n <= 0 goto E2
+-
+- // y[i] += alpha * x[i] for the last iteration if n is odd.
+- MOVSD 0(R8)(SI*8), X0
+- MOVSD 0(R9)(DI*8), X1
+- MULSD X7, X0
+- ADDSD X0, X1
+- MOVSD X1, 0(R9)(DI*8)
+-
+-E2:
+- RET
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go
+deleted file mode 100644
+index 7e69957..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot.go
++++ /dev/null
+@@ -1,23 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-//+build !amd64 noasm
+-
+-package asm
+-
+-func DdotUnitary(x, y []float64) (sum float64) {
+- for i, v := range x {
+- sum += y[i] * v
+- }
+- return
+-}
+-
+-func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64) {
+- for i := 0; i < int(n); i++ {
+- sum += y[iy] * x[ix]
+- ix += incX
+- iy += incY
+- }
+- return
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go
+deleted file mode 100644
+index 7fa634a..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.go
++++ /dev/null
+@@ -1,10 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-//+build !noasm
+-
+-package asm
+-
+-func DdotUnitary(x, y []float64) (sum float64)
+-func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s b/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s
+deleted file mode 100644
+index a898bbb..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/ddot_amd64.s
++++ /dev/null
+@@ -1,140 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-//
+-// Some of the loop unrolling code is copied from:
+-// http://golang.org/src/math/big/arith_amd64.s
+-// which is distributed under these terms:
+-//
+-// Copyright (c) 2012 The Go Authors. All rights reserved.
+-//
+-// Redistribution and use in source and binary forms, with or without
+-// modification, are permitted provided that the following conditions are
+-// met:
+-//
+-// * Redistributions of source code must retain the above copyright
+-// notice, this list of conditions and the following disclaimer.
+-// * Redistributions in binary form must reproduce the above
+-// copyright notice, this list of conditions and the following disclaimer
+-// in the documentation and/or other materials provided with the
+-// distribution.
+-// * Neither the name of Google Inc. nor the names of its
+-// contributors may be used to endorse or promote products derived from
+-// this software without specific prior written permission.
+-//
+-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-
+-//+build !noasm
+-
+-// TODO(fhs): use textflag.h after we drop Go 1.3 support
+-//#include "textflag.h"
+-// Don't insert stack check preamble.
+-#define NOSPLIT 4
+-
+-
+-// func DdotUnitary(x, y []float64) (sum float64)
+-// This function assumes len(y) >= len(x).
+-TEXT ·DdotUnitary(SB),NOSPLIT,$0
+- MOVQ x_len+8(FP), DI // n = len(x)
+- MOVQ x+0(FP), R8
+- MOVQ y+24(FP), R9
+-
+- MOVQ $0, SI // i = 0
+- MOVSD $(0.0), X7 // sum = 0
+-
+- SUBQ $2, DI // n -= 2
+- JL V1 // if n < 0 goto V1
+-
+-U1: // n >= 0
+- // sum += x[i] * y[i] unrolled 2x.
+- MOVUPD 0(R8)(SI*8), X0
+- MOVUPD 0(R9)(SI*8), X1
+- MULPD X1, X0
+- ADDPD X0, X7
+-
+- ADDQ $2, SI // i += 2
+- SUBQ $2, DI // n -= 2
+- JGE U1 // if n >= 0 goto U1
+-
+-V1: // n > 0
+- ADDQ $2, DI // n += 2
+- JLE E1 // if n <= 0 goto E1
+-
+- // sum += x[i] * y[i] for last iteration if n is odd.
+- MOVSD 0(R8)(SI*8), X0
+- MOVSD 0(R9)(SI*8), X1
+- MULSD X1, X0
+- ADDSD X0, X7
+-
+-E1:
+- // Add the two sums together.
+- MOVSD X7, X0
+- UNPCKHPD X7, X7
+- ADDSD X0, X7
+- MOVSD X7, sum+48(FP) // return final sum
+- RET
+-
+-
+-// func DdotInc(x, y []float64, n, incX, incY, ix, iy uintptr) (sum float64)
+-TEXT ·DdotInc(SB),NOSPLIT,$0
+- MOVQ x+0(FP), R8
+- MOVQ y+24(FP), R9
+- MOVQ n+48(FP), CX
+- MOVQ incX+56(FP), R11
+- MOVQ incY+64(FP), R12
+- MOVQ ix+72(FP), R13
+- MOVQ iy+80(FP), R14
+-
+- MOVSD $(0.0), X7 // sum = 0
+- LEAQ (R8)(R13*8), SI // p = &x[ix]
+- LEAQ (R9)(R14*8), DI // q = &y[ix]
+- SHLQ $3, R11 // incX *= sizeof(float64)
+- SHLQ $3, R12 // indY *= sizeof(float64)
+-
+- SUBQ $2, CX // n -= 2
+- JL V2 // if n < 0 goto V2
+-
+-U2: // n >= 0
+- // sum += *p * *q unrolled 2x.
+- MOVHPD (SI), X0
+- MOVHPD (DI), X1
+- ADDQ R11, SI // p += incX
+- ADDQ R12, DI // q += incY
+- MOVLPD (SI), X0
+- MOVLPD (DI), X1
+- ADDQ R11, SI // p += incX
+- ADDQ R12, DI // q += incY
+-
+- MULPD X1, X0
+- ADDPD X0, X7
+-
+- SUBQ $2, CX // n -= 2
+- JGE U2 // if n >= 0 goto U2
+-
+-V2:
+- ADDQ $2, CX // n += 2
+- JLE E2 // if n <= 0 goto E2
+-
+- // sum += *p * *q for the last iteration if n is odd.
+- MOVSD (SI), X0
+- MULSD (DI), X0
+- ADDSD X0, X7
+-
+-E2:
+- // Add the two sums together.
+- MOVSD X7, X0
+- UNPCKHPD X7, X7
+- ADDSD X0, X7
+- MOVSD X7, sum+88(FP) // return final sum
+- RET
+-
+\ No newline at end of file
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go
+deleted file mode 100644
+index 8450689..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/dsdot.go
++++ /dev/null
+@@ -1,23 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-func DsdotUnitary(x, y []float32) (sum float64) {
+- for i, v := range x {
+- sum += float64(y[i]) * float64(v)
+- }
+- return
+-}
+-
+-func DsdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float64) {
+- for i := 0; i < int(n); i++ {
+- sum += float64(y[iy]) * float64(x[ix])
+- ix += incX
+- iy += incY
+- }
+- return
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go
+deleted file mode 100644
+index e252140..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/generate.go
++++ /dev/null
+@@ -1,8 +0,0 @@
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-//go:generate ./single_precision
+-//go:generate ./complex
+-
+-package asm
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go
+deleted file mode 100644
+index 3ef767f..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/saxpy.go
++++ /dev/null
+@@ -1,22 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-// The extra z parameter is needed because of floats.AddScaledTo
+-func SaxpyUnitary(alpha float32, x, y, z []float32) {
+- for i, v := range x {
+- z[i] = alpha*v + y[i]
+- }
+-}
+-
+-func SaxpyInc(alpha float32, x, y []float32, n, incX, incY, ix, iy uintptr) {
+- for i := 0; i < int(n); i++ {
+- y[iy] += alpha * x[ix]
+- ix += incX
+- iy += incY
+- }
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go
+deleted file mode 100644
+index 0cef5de..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/sdot.go
++++ /dev/null
+@@ -1,23 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-func SdotUnitary(x, y []float32) (sum float32) {
+- for i, v := range x {
+- sum += y[i] * v
+- }
+- return
+-}
+-
+-func SdotInc(x, y []float32, n, incX, incY, ix, iy uintptr) (sum float32) {
+- for i := 0; i < int(n); i++ {
+- sum += y[iy] * x[ix]
+- ix += incX
+- iy += incY
+- }
+- return
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision b/Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision
+deleted file mode 100644
+index a937a97..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/single_precision
++++ /dev/null
+@@ -1,30 +0,0 @@
+-#!/usr/bin/env bash
+-
+-# Copyright ©2015 The gonum Authors. All rights reserved.
+-# Use of this source code is governed by a BSD-style
+-# license that can be found in the LICENSE file.
+-
+-echo Generating dsdot.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > dsdot.go
+-cat ddot.go \
+-| grep -v '//+build' \
+-| gofmt -r '[]float64 -> []float32' \
+-| gofmt -r 'a * b -> float64(a) * float64(b)' \
+-| sed 's/Ddot/Dsdot/' \
+->> dsdot.go
+-
+-echo Generating sdot.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > sdot.go
+-cat ddot.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> float32' \
+-| sed 's/Ddot/Sdot/' \
+->> sdot.go
+-
+-echo Generating saxpy.go
+-echo -e '// Generated code do not edit. Run `go generate`.\n' > saxpy.go
+-cat daxpy.go \
+-| grep -v '//+build' \
+-| gofmt -r 'float64 -> float32' \
+-| sed 's/Daxpy/Saxpy/' \
+->> saxpy.go
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go
+deleted file mode 100644
+index 9478f25..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/zaxpy.go
++++ /dev/null
+@@ -1,22 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-// The extra z parameter is needed because of floats.AddScaledTo
+-func ZaxpyUnitary(alpha complex128, x, y, z []complex128) {
+- for i, v := range x {
+- z[i] = alpha*v + y[i]
+- }
+-}
+-
+-func ZaxpyInc(alpha complex128, x, y []complex128, n, incX, incY, ix, iy uintptr) {
+- for i := 0; i < int(n); i++ {
+- y[iy] += alpha * x[ix]
+- ix += incX
+- iy += incY
+- }
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go
+deleted file mode 100644
+index 7b8febc..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotc.go
++++ /dev/null
+@@ -1,25 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-import "math/cmplx"
+-
+-func ZdotcUnitary(x, y []complex128) (sum complex128) {
+- for i, v := range x {
+- sum += y[i] * cmplx.Conj(v)
+- }
+- return
+-}
+-
+-func ZdotcInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
+- for i := 0; i < int(n); i++ {
+- sum += y[iy] * cmplx.Conj(x[ix])
+- ix += incX
+- iy += incY
+- }
+- return
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go b/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go
+deleted file mode 100644
+index 82c1fe2..0000000
+--- a/Godeps/_workspace/src/github.com/gonum/internal/asm/zdotu.go
++++ /dev/null
+@@ -1,23 +0,0 @@
+-// Generated code do not edit. Run `go generate`.
+-
+-// Copyright ©2015 The gonum Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style
+-// license that can be found in the LICENSE file.
+-
+-package asm
+-
+-func ZdotuUnitary(x, y []complex128) (sum complex128) {
+- for i, v := range x {
+- sum += y[i] * v
+- }
+- return
+-}
+-
+-func ZdotuInc(x, y []complex128, n, incX, incY, ix, iy uintptr) (sum complex128) {
+- for i := 0; i < int(n); i++ {
+- sum += y[iy] * x[ix]
+- ix += incX
+- iy += incY
+- }
+- return
+-}
+diff --git a/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go b/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go
+index 77616ba..1610a83 100644
+--- a/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go
++++ b/Godeps/_workspace/src/github.com/gonum/matrix/mat64/inner.go
+@@ -6,7 +6,7 @@ package mat64
+
+ import (
+ "github.com/gonum/blas"
+- "github.com/gonum/internal/asm"
++ "github.com/gonum/inteernal/asm"
+ )
+
+ // Inner computes the generalized inner product
+--
+1.9.3
+
diff --git a/kubernetes-accounting.conf b/kubernetes-accounting.conf
new file mode 100644
index 0000000..f9be0b9
--- /dev/null
+++ b/kubernetes-accounting.conf
@@ -0,0 +1,4 @@
+[Manager]
+DefaultCPUAccounting=yes
+DefaultMemoryAccounting=yes
+
diff --git a/kubernetes.spec b/kubernetes.spec
new file mode 100644
index 0000000..fa73955
--- /dev/null
+++ b/kubernetes.spec
@@ -0,0 +1,1798 @@
+%if 0%{?fedora}
+%global with_devel 1
+%global with_bundled 1
+%global with_debug 1
+%else
+%global with_devel 0
+%global with_bundled 1
+%global with_debug 0
+%endif
+
+%if 0%{?with_debug}
+# https://bugzilla.redhat.com/show_bug.cgi?id=995136#c12
+%global _dwz_low_mem_die_limit 0
+%else
+%global debug_package %{nil}
+%endif
+%global provider github
+%global provider_tld com
+%global project openshift
+%global repo origin
+# https://github.com/openshift/origin
+%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
+%global import_path k8s.io/kubernetes
+%global commit 2e62fabf9639c792410e98a9a1414937d4b786c9
+%global shortcommit %(c=%{commit}; echo ${c:0:7})
+
+%global openshift_ip github.com/openshift/origin
+
+%global k8s_provider github
+%global k8s_provider_tld com
+%global k8s_project kubernetes
+%global k8s_repo kubernetes
+# https://github.com/kubernetes/kubernetes
+%global k8s_provider_prefix %{k8s_provider}.%{k8s_provider_tld}/%{k8s_project}/%{k8s_repo}
+# commit picked from openshift/kubernetes although it is available on kubernetes/kubernetes as well
+%global k8s_commit 4a3f9c5b19c7ff804cbc1bf37a15c044ca5d2353
+%global k8s_shortcommit %(c=%{k8s_commit}; echo ${c:0:7})
+%global k8s_src_dir Godeps/_workspace/src/k8s.io/kubernetes/
+%global k8s_src_dir_sed Godeps\\/_workspace\\/src\\/k8s\\.io\\/kubernetes\\/
+
+%global con_provider github
+%global con_provider_tld com
+%global con_project kubernetes
+%global con_repo contrib
+# https://github.com/kubernetes/contrib
+%global con_provider_prefix %{con_provider}.%{con_provider_tld}/%{con_project}/%{con_repo}
+%global con_commit 18bb93d3509bd13a15639969c8b0ebe39a7f9b50
+%global con_shortcommit %(c=%{con_commit}; echo ${c:0:7})
+
+%global O4N_GIT_MAJOR_VERSION 1
+%global O4N_GIT_MINOR_VERSION 2
+%global O4N_GIT_VERSION v1.2.0
+%global K8S_GIT_VERSION v1.2.0-36-g4a3f9c5b19c7ff
+%global kube_version 1.2.0
+%global kube_git_version v%{kube_version}
+
+#I really need this, otherwise "version_ldflags=$(kube::version_ldflags)"
+# does not work
+%global _buildshell /bin/bash
+%global _checkshell /bin/bash
+
+Name: kubernetes
+Version: %{kube_version}
+Release: 0.25.git%{k8s_shortcommit}%{?dist}
+Summary: Container cluster management
+License: ASL 2.0
+URL: %{import_path}
+ExclusiveArch: x86_64 ppc64le
+Source0: https://%{provider_prefix}/archive/%{commit}/%{repo}-%{shortcommit}.tar.gz
+Source1: https://%{k8s_provider_prefix}/archive/%{k8s_commit}/%{k8s_repo}-%{k8s_shortcommit}.tar.gz
+Source2: https://%{con_provider_prefix}/archive/%{con_commit}/%{con_repo}-%{con_shortcommit}.tar.gz
+Source3: kubernetes-accounting.conf
+
+Source33: genmanpages.sh
+Patch2: Change-etcd-server-port.patch
+Patch3: build-with-debug-info.patch
+
+Patch4: internal-to-inteernal.patch
+Patch5: 0001-internal-inteernal.patch
+
+Patch9: hack-test-cmd.sh.patch
+
+# Drop apiserver command from hyperkube as apiserver has different permisions and capabilities
+# Add kube-prefix for controller-manager, proxy and scheduler
+Patch12: remove-apiserver-add-kube-prefix-for-hyperkube.patch
+
+Patch13: disable-v1beta3.patch
+Patch14: hyperkube-kubectl-dont-shift-os.Args.patch
+Patch15: hyperkube.server-don-t-parse-args-for-any-command.patch
+
+# ppc64le
+Patch16: fix-support-for-ppc64le.patch
+
+# It obsoletes cadvisor but needs its source code (literally integrated)
+Obsoletes: cadvisor
+
+# kubernetes is decomposed into master and node subpackages
+# require both of them for updates
+Requires: kubernetes-master = %{version}-%{release}
+Requires: kubernetes-node = %{version}-%{release}
+
+%description
+%{summary}
+
+%if 0%{?with_devel}
+%package devel
+Summary: %{summary}
+BuildArch: noarch
+
+Provides: golang(%{import_path}/cmd/kube-apiserver/app) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kube-apiserver/app/options) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kube-controller-manager/app) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kube-controller-manager/app/options) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kube-proxy/app) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kube-proxy/app/options) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kubectl/app) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kubelet/app) = %{version}-%{release}
+Provides: golang(%{import_path}/cmd/kubelet/app/options) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/assert) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/backoff) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/controllermanager) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/election) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/executor) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/executor/config) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/executor/messages) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/executor/service) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/hyperkube) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/minion) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/minion/config) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/minion/tasks) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/node) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/offers) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/offers/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/podutil) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/proc) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/profile) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/queue) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/redirfd) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/runtime) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/algorithm) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/algorithm/podschedulers) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/binder) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/controller) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/deleter) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/errorhandler) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/framework) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/podreconciler) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/components/tasksreconciler) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/config) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/constraint) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/errors) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/executorinfo) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/ha) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/integration) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/meta) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/podtask) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/queuer) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/resource) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/scheduler/service) = %{version}-%{release}
+Provides: golang(%{import_path}/contrib/mesos/pkg/service) = %{version}-%{release}
+Provides: golang(%{import_path}/examples) = %{version}-%{release}
+Provides: golang(%{import_path}/examples/apiserver/rest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/admission) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/endpoints) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/errors) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/errors/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/install) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/meta) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/pod) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/resource) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/rest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/rest/resttest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/testapi) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/testing) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/testing/compat) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/unversioned) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/util) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/v1) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/v1beta3) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/api/validation) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apimachinery) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apimachinery/registered) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/abac) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/abac/latest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/abac/v0) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/abac/v1beta1) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/authorization) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/authorization/install) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/authorization/v1beta1) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/authorization/validation) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/componentconfig) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/componentconfig/install) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/componentconfig/v1alpha1) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/extensions) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/extensions/install) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/extensions/v1beta1) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/extensions/validation) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/metrics/install) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apis/metrics/v1alpha1) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apiserver) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apiserver/authenticator) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apiserver/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/apiserver/testing) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/auth/authenticator) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/auth/authenticator/bearertoken) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/auth/authorizer) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/auth/authorizer/abac) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/auth/authorizer/union) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/auth/handlers) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/auth/user) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/capabilities) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/cache) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/chaosclient) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/leaderelection) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/record) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/transport) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/auth) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api/latest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/clientcmd/api/v1) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/fake) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/portforward) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/remotecommand) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/testclient) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/client/unversioned/testclient/simple) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers/aws) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers/fake) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers/gce) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers/mesos) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers/openstack) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers/ovirt) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/cloudprovider/providers/rackspace) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/daemon) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/deployment) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/endpoint) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/framework) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/gc) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/job) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/namespace) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/node) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/persistentvolume) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/podautoscaler) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/podautoscaler/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/replication) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/resourcequota) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/route) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/service) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/controller/serviceaccount) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/conversion) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/conversion/queryparams) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/credentialprovider) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/credentialprovider/aws) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/credentialprovider/gcp) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/fieldpath) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/fields) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/genericapiserver) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/healthz) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/httplog) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl/cmd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl/cmd/config) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl/cmd/util) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl/cmd/util/editor) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl/cmd/util/jsonmerge) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl/resource) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubectl/testing) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/cadvisor) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/client) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/cm) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/config) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/container) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/dockertools) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/envvars) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/leaky) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/lifecycle) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/network) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/network/cni) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/network/exec) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/network/hairpin) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/pleg) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/pod) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/prober) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/prober/results) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/qos) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/qos/util) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/rkt) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/server) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/server/portforward) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/server/stats) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/status) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/types) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/util) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/util/format) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/kubelet/util/queue) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/labels) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/master) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/master/ports) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/probe) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/probe/exec) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/probe/http) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/probe/tcp) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/proxy) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/proxy/config) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/proxy/iptables) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/proxy/userspace) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/componentstatus) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/configmap) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/configmap/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/controller) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/controller/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/daemonset) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/daemonset/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/deployment) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/deployment/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/endpoint) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/endpoint/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/event) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/event/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/experimental/controller/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/generic) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/generic/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/generic/rest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/horizontalpodautoscaler) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/horizontalpodautoscaler/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/ingress) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/ingress/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/job) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/job/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/limitrange) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/limitrange/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/namespace) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/namespace/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/node) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/node/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/persistentvolume) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/persistentvolume/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/persistentvolumeclaim) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/persistentvolumeclaim/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/pod) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/pod/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/pod/rest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/podtemplate) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/podtemplate/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/registrytest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/resourcequota) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/resourcequota/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/secret) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/secret/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/securitycontextconstraints) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/securitycontextconstraints/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/allocator) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/allocator/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/ipallocator) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/ipallocator/controller) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/ipallocator/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/portallocator) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/service/portallocator/controller) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/serviceaccount) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/serviceaccount/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/thirdpartyresource) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/thirdpartyresource/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/thirdpartyresourcedata) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/registry/thirdpartyresourcedata/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/runtime) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/runtime/protobuf) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/runtime/serializer) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/runtime/serializer/json) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/runtime/serializer/recognizer) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/runtime/serializer/versioning) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/runtime/serializer/yaml) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/securitycontext) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/securitycontextconstraints) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/securitycontextconstraints/capabilities) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/securitycontextconstraints/group) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/securitycontextconstraints/selinux) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/securitycontextconstraints/user) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/serviceaccount) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/storage) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/storage/etcd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/storage/etcd/etcdtest) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/storage/etcd/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/storage/etcd/testing) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/storage/etcd/util) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/storage/testing) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/types) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/atomic) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/bandwidth) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/chmod) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/chown) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/config) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/dbus) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/deployment) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/errors) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/exec) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/flushwriter) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/hash) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/httpstream) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/httpstream/spdy) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/intstr) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/io) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/iptables) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/iptables/testing) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/json) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/jsonpath) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/keymutex) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/labels) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/limitwriter) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/mount) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/net) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/node) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/oom) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/parsers) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/pod) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/procfs) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/proxy) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/rand) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/selinux) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/sets) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/sets/types) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/slice) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/strategicpatch) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/strings) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/sysctl) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/testing) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/validation) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/validation/field) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/wait) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/workqueue) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/wsstream) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/util/yaml) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/version) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/version/verflag) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/aws_ebs) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/cephfs) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/cinder) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/downwardapi) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/empty_dir) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/fc) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/flexvolume) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/flocker) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/gce_pd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/git_repo) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/glusterfs) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/host_path) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/iscsi) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/nfs) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/persistent_claim) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/rbd) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/secret) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/volume/util) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/watch) = %{version}-%{release}
+Provides: golang(%{import_path}/pkg/watch/json) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/cmd/kube-scheduler/app) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/cmd/kube-scheduler/app/options) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/admit) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/alwayspullimages) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/deny) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/exec) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/initialresources) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/limitranger) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/namespace/autoprovision) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/namespace/exists) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/namespace/lifecycle) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/persistentvolume/label) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/resourcequota) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/securitycontext/scdeny) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/admission/serviceaccount) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/password/passwordfile) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/basicauth) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/keystone) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/union) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/request/x509) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/oidc) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/auth/authenticator/token/tokenfile) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/predicates) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithm/priorities) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithmprovider) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/algorithmprovider/defaults) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/api) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/api/latest) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/api/v1) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/api/validation) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/factory) = %{version}-%{release}
+Provides: golang(%{import_path}/plugin/pkg/scheduler/metrics) = %{version}-%{release}
+Provides: golang(%{import_path}/test/e2e) = %{version}-%{release}
+
+%description devel
+Libraries for building packages importing k8s.io/kubernetes.
+Currently, the devel is not suitable for development.
+It is meant only as a buildtime dependency for other projects.
+
+This package contains library source intended for
+building other packages which use %{project}/%{repo}.
+%endif
+
+%package unit-test
+Summary: %{summary} - for running unit tests
+
+# below Rs used for testing
+Requires: golang >= 1.2-7
+Requires: etcd >= 2.0.9
+Requires: hostname
+Requires: rsync
+Requires: NetworkManager
+
+%description unit-test
+%{summary} - for running unit tests
+
+%package master
+Summary: Kubernetes services for master host
+
+BuildRequires: golang >= 1.2-7
+BuildRequires: systemd
+BuildRequires: rsync
+BuildRequires: go-md2man
+
+Requires(pre): shadow-utils
+Requires: kubernetes-client = %{version}-%{release}
+
+# if node is installed with node, version and release must be the same
+Conflicts: kubernetes-node < %{version}-%{release}
+Conflicts: kubernetes-node > %{version}-%{release}
+
+%description master
+Kubernetes services for master host
+
+%package node
+Summary: Kubernetes services for node host
+
+%if 0%{?fedora} >= 21 || 0%{?rhel}
+Requires: docker
+%else
+Requires: docker-io
+%endif
+
+BuildRequires: golang >= 1.2-7
+BuildRequires: systemd
+BuildRequires: rsync
+BuildRequires: go-md2man
+
+Requires(pre): shadow-utils
+Requires: socat
+Requires: kubernetes-client = %{version}-%{release}
+
+# if master is installed with node, version and release must be the same
+Conflicts: kubernetes-master < %{version}-%{release}
+Conflicts: kubernetes-master > %{version}-%{release}
+
+%description node
+Kubernetes services for node host
+
+%package client
+Summary: Kubernetes client tools
+
+BuildRequires: golang >= 1.2-7
+
+%description client
+Kubernetes client tools like kubectl
+
+%prep
+%setup -q -n %{k8s_repo}-%{k8s_commit} -T -b 1
+%if 0%{?with_debug}
+%patch3 -p1
+%endif
+# Hack test-cmd.sh to be run with os binaries
+%patch9 -p1
+
+%setup -q -n %{con_repo}-%{con_commit} -T -b 2
+%setup -q -n %{repo}-%{commit}
+
+# clean the directory up to Godeps
+dirs=$(ls | grep -v "^Godeps")
+rm -rf $dirs
+
+# internal -> inteernal
+%patch4 -p1
+%patch5 -p1
+
+# move k8s code from Godeps
+mv Godeps/_workspace/src/k8s.io/kubernetes/* .
+# copy missing source code
+cp ../%{k8s_repo}-%{k8s_commit}/cmd/kube-apiserver/apiserver.go cmd/kube-apiserver/.
+cp ../%{k8s_repo}-%{k8s_commit}/cmd/kube-controller-manager/controller-manager.go cmd/kube-controller-manager/.
+cp ../%{k8s_repo}-%{k8s_commit}/cmd/kubelet/kubelet.go cmd/kubelet/.
+cp ../%{k8s_repo}-%{k8s_commit}/cmd/kube-proxy/proxy.go cmd/kube-proxy/.
+cp ../%{k8s_repo}-%{k8s_commit}/plugin/cmd/kube-scheduler/scheduler.go plugin/cmd/kube-scheduler/.
+cp -r ../%{k8s_repo}-%{k8s_commit}/cmd/kubectl cmd/.
+# copy hack directory
+cp -r ../%{k8s_repo}-%{k8s_commit}/hack .
+cp -r ../%{k8s_repo}-%{k8s_commit}/cluster .
+# copy contrib directory
+cp -r ../%{k8s_repo}-%{k8s_commit}/contrib .
+# copy contrib folder
+cp -r ../%{con_repo}-%{con_commit}/init contrib/.
+# copy docs
+cp -r ../%{k8s_repo}-%{k8s_commit}/docs/admin docs/.
+cp -r ../%{k8s_repo}-%{k8s_commit}/docs/man docs/.
+# copy LICENSE and *.md
+cp ../%{k8s_repo}-%{k8s_commit}/LICENSE .
+cp ../%{k8s_repo}-%{k8s_commit}/*.md .
+# copy hyperkube
+cp -r ../%{k8s_repo}-%{k8s_commit}/cmd/hyperkube cmd/.
+
+%patch2 -p1
+
+# Drop apiserver from hyperkube
+%patch12 -p1
+
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+
+%ifarch ppc64le
+%patch16 -p1
+%endif
+
+pwd
+
+%build
+export KUBE_GIT_TREE_STATE="clean"
+export KUBE_GIT_COMMIT=%{commit}
+export KUBE_GIT_VERSION=%{kube_git_version}
+
+hack/build-go.sh --use_go_build cmd/hyperkube cmd/kube-apiserver
+
+# convert md to man
+pushd docs
+pushd admin
+cp kube-apiserver.md kube-controller-manager.md kube-proxy.md kube-scheduler.md kubelet.md ..
+popd
+cp %{SOURCE33} genmanpages.sh
+bash genmanpages.sh
+popd
+
+%install
+. hack/lib/init.sh
+kube::golang::setup_env
+
+%ifarch ppc64le
+output_path="${KUBE_OUTPUT_BINPATH}"
+%else
+output_path="${KUBE_OUTPUT_BINPATH}/$(kube::golang::current_platform)"
+%endif
+
+install -m 755 -d %{buildroot}%{_bindir}
+
+echo "+++ INSTALLING hyperkube"
+install -p -m 755 -t %{buildroot}%{_bindir} ${output_path}/hyperkube
+
+echo "+++ INSTALLING kube-apiserver"
+install -p -m 754 -t %{buildroot}%{_bindir} ${output_path}/kube-apiserver
+
+binaries=(kube-controller-manager kube-scheduler kube-proxy kubelet kubectl)
+for bin in "${binaries[@]}"; do
+ echo "+++ HARDLINKING ${bin} to hyperkube"
+ ln %{buildroot}%{_bindir}/hyperkube %{buildroot}%{_bindir}/${bin}
+done
+
+# install the bash completion
+install -d -m 0755 %{buildroot}%{_datadir}/bash-completion/completions/
+install -t %{buildroot}%{_datadir}/bash-completion/completions/ contrib/completions/bash/kubectl
+
+# install config files
+install -d -m 0755 %{buildroot}%{_sysconfdir}/%{name}
+install -m 644 -t %{buildroot}%{_sysconfdir}/%{name} contrib/init/systemd/environ/*
+
+# install service files
+install -d -m 0755 %{buildroot}%{_unitdir}
+install -m 0644 -t %{buildroot}%{_unitdir} contrib/init/systemd/*.service
+
+# install manpages
+install -d %{buildroot}%{_mandir}/man1
+install -p -m 644 docs/man/man1/* %{buildroot}%{_mandir}/man1
+# from k8s tarball copied docs/man/man1/*.1
+
+# install the place the kubelet defaults to put volumes
+install -d %{buildroot}%{_sharedstatedir}/kubelet
+
+# place contrib/init/systemd/tmpfiles.d/kubernetes.conf to /usr/lib/tmpfiles.d/kubernetes.conf
+install -d -m 0755 %{buildroot}%{_tmpfilesdir}
+install -p -m 0644 -t %{buildroot}/%{_tmpfilesdir} contrib/init/systemd/tmpfiles.d/kubernetes.conf
+mkdir -p %{buildroot}/run
+install -d -m 0755 %{buildroot}/run/%{name}/
+
+# enable CPU and Memory accounting
+install -d -m 0755 %{buildroot}/%{_sysconfdir}/systemd/system.conf.d
+install -p -m 0644 -t %{buildroot}/%{_sysconfdir}/systemd/system.conf.d %{SOURCE3}
+
+# source codes for building projects
+%if 0%{?with_devel}
+install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
+echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
+# find all *.go but no *_test.go files and generate devel.file-list
+for file in $(find . -iname "*.go" \! -iname "*_test.go") ; do
+ echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
+ install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
+ cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
+ echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
+done
+%endif
+
+%if 0%{?with_devel}
+sort -u -o devel.file-list devel.file-list
+%endif
+
+# place files for unit-test rpm
+install -d -m 0755 %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/
+pushd ../%{k8s_repo}-%{k8s_commit}
+# basically, everything from the root directory is needed
+# unit-tests needs source code
+# integration tests needs docs and other files
+# test-cmd.sh atm needs cluster, examples and other
+for d in $(ls -d */); do
+ cp -a $d %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/
+done
+cp -a *.md %{buildroot}%{_sharedstatedir}/kubernetes-unit-test/
+popd
+
+%check
+# Fedora, RHEL7 and CentOS are tested via unit-test subpackage
+if [ 1 != 1 ]; then
+echo "******Testing the commands*****"
+hack/test-cmd.sh
+echo "******Benchmarking kube********"
+hack/benchmark-go.sh
+
+# In Fedora 20 and RHEL7 the go cover tools isn't available correctly
+%if 0%{?fedora} >= 21
+echo "******Testing the go code******"
+hack/test-go.sh
+echo "******Testing integration******"
+hack/test-integration.sh --use_go_build
+%endif
+fi
+
+#define license tag if not already defined
+%{!?_licensedir:%global license %doc}
+
+%files
+# empty as it depends on master and node
+
+%files master
+%license LICENSE
+%doc *.md
+%{_mandir}/man1/kube-apiserver.1*
+%{_mandir}/man1/kube-controller-manager.1*
+%{_mandir}/man1/kube-scheduler.1*
+%attr(754, -, kube) %caps(cap_net_bind_service=ep) %{_bindir}/kube-apiserver
+%{_bindir}/kube-controller-manager
+%{_bindir}/kube-scheduler
+%{_bindir}/hyperkube
+%{_unitdir}/kube-apiserver.service
+%{_unitdir}/kube-controller-manager.service
+%{_unitdir}/kube-scheduler.service
+%dir %{_sysconfdir}/%{name}
+%config(noreplace) %{_sysconfdir}/%{name}/apiserver
+%config(noreplace) %{_sysconfdir}/%{name}/scheduler
+%config(noreplace) %{_sysconfdir}/%{name}/config
+%config(noreplace) %{_sysconfdir}/%{name}/controller-manager
+%{_tmpfilesdir}/kubernetes.conf
+%verify(not size mtime md5) %attr(755, kube,kube) %dir /run/%{name}
+
+%files node
+%license LICENSE
+%doc *.md
+%{_mandir}/man1/kubelet.1*
+%{_mandir}/man1/kube-proxy.1*
+%{_bindir}/kubelet
+%{_bindir}/kube-proxy
+%{_bindir}/hyperkube
+%{_unitdir}/kube-proxy.service
+%{_unitdir}/kubelet.service
+%dir %{_sharedstatedir}/kubelet
+%dir %{_sysconfdir}/%{name}
+%config(noreplace) %{_sysconfdir}/%{name}/config
+%config(noreplace) %{_sysconfdir}/%{name}/kubelet
+%config(noreplace) %{_sysconfdir}/%{name}/proxy
+%config(noreplace) %{_sysconfdir}/systemd/system.conf.d/kubernetes-accounting.conf
+%{_tmpfilesdir}/kubernetes.conf
+%verify(not size mtime md5) %attr(755, kube,kube) %dir /run/%{name}
+
+%files client
+%license LICENSE
+%doc *.md
+%{_mandir}/man1/kubectl.1*
+%{_mandir}/man1/kubectl-*
+%{_bindir}/kubectl
+%{_bindir}/hyperkube
+%{_datadir}/bash-completion/completions/kubectl
+
+%files unit-test
+%{_sharedstatedir}/kubernetes-unit-test/
+
+%if 0%{?with_devel}
+%files devel -f devel.file-list
+%doc *.md
+%dir %{gopath}/src/k8s.io
+%endif
+
+%pre master
+getent group kube >/dev/null || groupadd -r kube
+getent passwd kube >/dev/null || useradd -r -g kube -d / -s /sbin/nologin \
+ -c "Kubernetes user" kube
+
+%post master
+%systemd_post kube-apiserver kube-scheduler kube-controller-manager
+
+%preun master
+%systemd_preun kube-apiserver kube-scheduler kube-controller-manager
+
+%postun master
+%systemd_postun
+
+
+%pre node
+getent group kube >/dev/null || groupadd -r kube
+getent passwd kube >/dev/null || useradd -r -g kube -d / -s /sbin/nologin \
+ -c "Kubernetes user" kube
+
+%post node
+%systemd_post kubelet kube-proxy
+# If accounting is not currently enabled systemd reexec
+if [[ `systemctl show docker kubelet | grep -q -e CPUAccounting=no -e MemoryAccounting=no; echo $?` -eq 0 ]]; then
+ systemctl daemon-reexec
+fi
+
+%preun node
+%systemd_preun kubelet kube-proxy
+
+%postun node
+%systemd_postun
+
+%changelog
+* Wed Jul 13 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.25.git4a3f9c5
+- Enable CPU and Memory accounting on a node
+
+* Wed Jun 29 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.24.git4a3f9c5
+- Be more verbose about devel subpackage
+ resolves: #1269449
+
+* Tue Jun 28 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.23.git4a3f9c5
+- Own /run/kubernetes directory
+ resolves: #1264699
+
+* Sat May 28 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.22.git4a3f9c5
+- Bump to origin v1.2.0
+ resolves: #1340643
+
+* Wed May 04 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.21.git4a3f9c5
+- Extend uni-test subpackage to run other tests
+
+* Mon Apr 25 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.20.git4a3f9c5
+- Update support for ppc64le to use go compiler
+ related: #1306214
+
+* Thu Apr 21 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.19.git4a3f9c5
+- Fix support for ppc64le
+ related: #1306214
+
+* Tue Apr 19 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.18.git4a3f9c5
+- Bump to origin v1.1.6
+ resolves: #1328357
+
+* Mon Apr 11 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.17.alpha6.git4a3f9c5
+- Don't disable extensions/v1beta1 by default to conform with upstream documentation
+
+* Wed Mar 30 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.16.alpha6.git4a3f9c5
+ Update to origin's v1.1.5
+ Build on ppc64le as well
+ resolves: #1306214
+
+* Tue Mar 08 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.15.alpha6.gitf0cd09a
+- hyperkube.server: don't parse args for any command
+
+* Fri Mar 04 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.14.alpha6.gitf0cd09a
+- Disable extensions/v1beta1 implicitly
+
+* Tue Mar 01 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.13.alpha6.gitf0cd09a
+- Hyperkube checks flags of individual commands/servers even if it does not define their flags.
+ Thus resulting in 'uknown shorthand flag' error
+
+* Mon Feb 29 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.12.alpha6.gitf0cd09a
+- Disable v1beta3
+- hyperkube-kubectl-dont shift os.Args
+
+* Fri Feb 26 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.11.alpha6.gitf0cd09a
+- add kube- prefix to controller-manager, proxy and scheduler
+
+* Fri Feb 26 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.10.alpha6.gitf0cd09a
+- Hardlink kube-controller-manager, kuber-scheduler, kubectl, kubelet and kube-proxy into hyperkube
+- Keep kube-apiserver binary as it is (it has different permission and capabilities)
+
+* Thu Feb 25 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.9.alpha6.gitf0cd09a
+- Fix Content-Type of docker client response
+ resolves: #1311861
+
+* Mon Feb 22 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.2.0-0.8.alpha6.gitf0cd09a
+- https://fedoraproject.org/wiki/Changes/golang1.6
+
+* Mon Feb 22 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.7.alpha6.git4c8e6f4
+- Bump to origin 1.1.3
+ kube-version-change command replaced with kubectl convert (check out docs/admin/cluster-management.md)
+ related: 1295066
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.2.0-0.6.alpha1.git4c8e6f4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Thu Jan 21 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.5.alpha1.git4c8e6f4
+- Bump to upstream e1d9873c1d5711b83fd3dd7eefe83a88ceb92c08
+ related: #1291860
+
+* Thu Jan 07 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.4.alpha1.git4c8e6f4
+- Move definition of all version, git and commit macros at one place
+ resolves: #1291860
+
+* Fri Jan 01 2016 jchaloup <jchaloup@redhat.com> - 1.2.0-0.3.alpha1.git4c8e6f4
+- Bump to upstream bf56e235826baded1772fb340266b8419c3e8f30
+ Rebase to origin's "v1.1.0.1 - Security Update to v1.1" release
+ resolves: #1295066
+
+* Thu Nov 26 2015 jchaloup <jchaloup@redhat.com> - 1.2.0-0.2.alpha1.git4c8e6f4
+- Bump to origin upstream a41c9ff38d52fd508481c3c2bac13d52871fde02
+- Build kubernetes from origin's Godeps using hack/build-go.sh
+ origin's Godeps = kubernetes upstream + additional patches
+
+* Tue Oct 20 2015 jchaloup <jchaloup@redhat.com> - 1.2.0-0.1.alpha1.git4c8e6f4
+- Bump to upstream 403de3874fba420fd096f2329b45fe2f5ae97e46
+ related: #1211266
+
+* Wed Oct 14 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.41.alpha1.gite9a6ef1
+- Bump to origin upstream e9a6ef1cd4c29d45730289a497d18b19d7ba450d
+ related: #1211266
+
+* Fri Oct 09 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.40.alpha1.git5f38cb0
+- Add missing short option for --server of kubectl
+- Update unit-test-subpackage (only test-cmd.sh atm)
+ related: #1211266
+
+* Fri Oct 09 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.39.alpha1.git5f38cb0
+- Add normalization of flags
+ related: #1211266
+
+* Fri Oct 02 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.38.alpha1.git5f38cb0
+- Restore unit-test subpackage (not yet tested)
+ related: #1211266
+
+* Wed Sep 30 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.37.alpha1.git5f38cb0
+- Do not unset default cluster, otherwise k8s ends with error when no cluster set
+ related: #1211266
+
+* Wed Sep 30 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.36.alpha0.git5f38cb0
+- Bump to o4n 5f38cb0e98c9e854cafba9c7f98dafd51e955ad8
+ related: #1211266
+
+* Tue Sep 29 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.35.alpha1.git2695cdc
+- Update git version of k8s and o4n, add macros
+ related: #1211266
+
+* Tue Sep 29 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.34.alpha1.git2695cdc
+- Built k8s from o4n tarball
+- Bump to upstream 2695cdcd29a8f11ef60278758e11f4817daf3c7c
+ related: #1211266
+
+* Tue Sep 22 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.33.alpha1.git09cf38e
+- Bump to upstream 09cf38e9a80327e2d41654db277d00f19e2c84d0
+ related: #1211266
+
+* Thu Sep 17 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.32.alpha1.git400e685
+- Bump to upstream 400e6856b082ecf4b295568acda68d630fc000f1
+ related: #1211266
+
+* Wed Sep 16 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.31.gitd549fc4
+- Bump to upstream d549fc400ac3e5901bd089b40168e1e6fb17341d
+ related: #1211266
+
+* Tue Sep 15 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.30.gitc9570e3
+- Bump to upstream c9570e34d03c6700d83f796c0125d17c5064e57d
+ related: #1211266
+
+* Mon Sep 14 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.29.git86b4e77
+- Bump to upstream 86b4e777e1947c1bc00e422306a3ca74cbd54dbe
+ related: #1211266
+
+* Thu Sep 10 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.28.gitf867ba3
+- Bump to upstream f867ba3ba13e3dad422efd21c74f52b9762de37e
+ related: #1211266
+
+* Wed Sep 09 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.27.git0f4fa4e
+- Bump to upstream 0f4fa4ed25ae9a9d1824fe55aeefb4d4ebfecdfd
+ related: #1211266
+
+* Tue Sep 08 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.26.git196f58b
+- Bump to upstream 196f58b9cb25a2222c7f9aacd624737910b03acb
+ related: #1211266
+
+* Mon Sep 07 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.25.git96e0ed5
+- Bump to upstream 96e0ed5749608d4cc32f61b3674deb04c8fa90ad
+ related: #1211266
+
+* Sat Sep 05 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.24.git2e2def3
+- Bump to upstream 2e2def36a904fe9a197da5fc70e433e2e884442f
+ related: #1211266
+
+* Fri Sep 04 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.23.gite724a52
+- Bump to upstream e724a5210adf717f62a72162621ace1e08730c75
+ related: #1211266
+
+* Thu Sep 03 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.22.gitb6f2f39
+- Bump to upstream b6f2f396baec5105ff928cf61903c2c368259b21
+ related: #1211266
+
+* Wed Sep 02 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.21.gitb4a3698
+- Bump to upstream b4a3698faed81410468eccf9f328ca6df3d0cca3
+ related: #1211266
+
+* Tue Sep 01 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.20.git2f9652c
+- Bump to upstream 2f9652c7f1d4b8f333c0b5c8c1270db83b913436
+ related: #1211266
+
+* Mon Aug 31 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.19.git66a644b
+- Bump to upstream 66a644b275ede9ddb98eb3f76e8d1840cafc2147
+ related: #1211266
+
+* Thu Aug 27 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.18.gitab73849
+- Bump to upstream ab7384943748312f5e9294f42d42ed3983c7c96c
+ related: #1211266
+
+* Wed Aug 26 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.17.git00e3442
+- Bump to upstream 00e34429e0242323ed34347cf0ab65b3d62b21f7
+ related: #1211266
+
+* Tue Aug 25 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.16.gita945785
+- Bump to upstream a945785409d5b68f3a2721d2209300edb5abf1ce
+ related: #1211266
+
+* Mon Aug 24 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.15.git5fe7029
+- Bump to upstream 5fe7029e688e1e5873a0b95a622edda5b5156d2b
+ related: #1211266
+
+* Fri Aug 21 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.14.gitb6f18c7
+- Bump to upstream b6f18c7ce08714c8d4f6019463879a164a41750e
+ related: #1211266
+
+* Thu Aug 20 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.13.git44fa48e
+- Bump to upstream 44fa48e5af44d3e988fa943d96a2de732d8cc666
+ related: #1211266
+
+* Wed Aug 19 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.12.gitb5a4a54
+- Bump to upstream b5a4a548df0cffb99bdcc3b9b9e48d4025d0541c
+ related: #1211266
+
+* Tue Aug 18 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.11.git919c7e9
+- Bump to upstream 919c7e94e23d2dcd5bdd96896e0a7990f9ae3338
+ related: #1211266
+
+* Tue Aug 18 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.10.git280b66c
+- Bump to upstream 280b66c9012c21e253acd4e730f8684c39ca08ec
+ related: #1211266
+
+* Mon Aug 17 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.9.git081d9c6
+- Bump to upstream 081d9c64d25c20ec16035036536511811118173d
+ related: #1211266
+
+* Fri Aug 14 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.8.git8dcbeba
+- Bump to upstream 8dcbebae5ef6a7191d9dfb65c68833c6852a21ad
+ related: #1211266
+
+* Thu Aug 13 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.7.git968cbbe
+- Bump to upstream 968cbbee5d4964bd916ba379904c469abb53d623
+ related: #1211266
+
+* Wed Aug 12 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.6.gitc91950f
+- Bump to upstream c91950f01cb14ad47486dfcd2fdfb4be3ee7f36b
+ related: #1211266
+
+* Tue Aug 11 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.5.gite44c8e6
+- Bump to upstream e44c8e6661c931f7fd434911b0d3bca140e1df3a
+ related: #1211266
+
+* Mon Aug 10 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.4.git2bfa9a1
+- Bump to upstream 2bfa9a1f98147cfdc2e9f4cf50e2c430518d91eb
+ related: #1243827
+
+* Thu Aug 06 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.3.git4c42e13
+- Bump to upstream 4c42e1302d3b351f3cb6074d32aa420bbd45e07d
+- Change import path prefix to k8s.io/kubernetes
+ related: #1243827
+
+* Wed Aug 05 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.2.git159ba48
+- Bump to upstream 159ba489329e9f6ce422541e13f97e1166090ec8
+ related: #1243827
+
+* Sat Aug 01 2015 jchaloup <jchaloup@redhat.com> - 1.1.0-0.1.git6129d3d
+- Bump to upstream 6129d3d4eb80714286650818081a64ce2699afed
+ related: #1243827
+
+* Fri Jul 31 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.18.gitff058a1
+- Bump to upstream ff058a1afeb63474f7a35805941f3b07c27aae0f
+ related: #1243827
+
+* Thu Jul 30 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.17.git769230e
+- Bump to upstream 769230e735993bb0bf924279a40593c147c9a6ab
+ related: #1243827
+
+* Wed Jul 29 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.16.gitdde7222
+- Bump to upstream dde72229dc9cbbdacfb2e44b22d9d5b357027020
+ related: #1243827
+
+* Tue Jul 28 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.15.gitc5bffaa
+- Bump to upstream c5bffaaf3166513da6259c44a5d1ba8e86bea5ce
+ related: #1243827
+
+* Sat Jul 25 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.14.git5bd82ff
+- Bump to upstream 5bd82ffe6da8f4e72e71b362635e558bfc412106
+ related: #1243827
+
+* Fri Jul 24 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.13.git291acd1
+- Bump to upstream 291acd1a09ac836ec7524b060a19a6498d9878dd
+ related: #1243827
+
+* Thu Jul 23 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.12.gitfbed349
+- Bump to upstream fbed3492bfa09e59b1c423fdd7c1ecad333a06ef
+ related: #1243827
+
+* Tue Jul 21 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.11.gitfbc85e9
+- Add runtime dependency of kubernetes-node on socat (so kubectl port-forward works on AH)
+
+* Tue Jul 21 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.10.gitfbc85e9
+- Update the build script for go1.5 as well
+- Bump to upstream fbc85e9838f25547be94fbffeeb92a756d908ca0
+ related: #1243827
+
+* Mon Jul 20 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.9.git2d88675
+- Bump to upstream 2d88675f2203d316d4bac312c7ccad12991b56c2
+- Change KUBE_ETCD_SERVERS to listen on 2379 ports instead of 4001
+ resolves: #1243827
+- Add kubernetes-client to provide kubectl command
+ resolves: #1241469
+
+* Mon Jul 20 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.8.gitb2dafda
+- Fix dependency and tests for go-1.5
+- with_debug off as the builds ends with error "ELFRESERVE too small: ..."
+
+* Sat Jul 18 2015 Eric Paris <eparis@redhat.com> - 1.0.0-0.7.gitb2dafda
+- Update apiserver binary gid
+
+* Fri Jul 17 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.6.gitb2dafda
+- Bump to upstream b2dafdaef5aceafad503ab56254b60f80da9e980
+ related: #1211266
+
+* Thu Jul 16 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.5.git596a8a4
+- Bump to upstream 596a8a40d12498b5335140f50753980bfaea4f6b
+ related: #1211266
+
+* Wed Jul 15 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.4.git6ba532b
+- Bump to upstream 6ba532b218cb5f5ea3f0e8dce5395182f388536c
+ related: #1211266
+
+* Tue Jul 14 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.3.gitc616182
+- Bump to upstream c6161824db3784e6156131307a5e94647e5557fd
+ related: #1211266
+
+* Mon Jul 13 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.2.git2c27b1f
+- Bump to upstream 2c27b1fa64f4e70f04575d1b217494f49332390e
+ related: #1211266
+
+* Sat Jul 11 2015 jchaloup <jchaloup@redhat.com> - 1.0.0-0.1.git1b37059
+- Bump to upstream 1b370599ccf271741e657335c4943cb8c7dba28b
+ related: #1211266
+
+* Fri Jul 10 2015 jchaloup <jchaloup@redhat.com> - 0.21.1-0.2.gitccc4cfc
+- Bump to upstream ccc4cfc7e11e0f127ac1cea045017dd799be3c63
+ related: #1211266
+
+* Thu Jul 09 2015 jchaloup <jchaloup@redhat.com> - 0.21.1-0.1.git41f8907
+- Update generating of man pages from md (add genmanpages.sh)
+- Bump to upstream 41f89075396329cd46c58495c7d3f7e13adcaa96
+ related: #1211266
+
+* Wed Jul 08 2015 jchaloup <jchaloup@redhat.com> - 0.20.2-0.5.git77be29e
+- Bump to upstream 77be29e3da71f0a136b6aa4048b2f0575c2598e4
+ related: #1211266
+
+* Tue Jul 07 2015 jchaloup <jchaloup@redhat.com> - 0.20.2-0.4.git639a7da
+- Bump to upstream 639a7dac50a331414cc6c47083323388da0d8756
+ related: #1211266
+
+* Mon Jul 06 2015 jchaloup <jchaloup@redhat.com> - 0.20.2-0.3.gitbb6f2f7
+- Bump to upstream bb6f2f7ad90596d624d84cc691eec0f518e90cc8
+ related: #1211266
+
+* Fri Jul 03 2015 jchaloup <jchaloup@redhat.com> - 0.20.2-0.2.git974377b
+- Bump to upstream 974377b3064ac59b6e5694bfa568d67128026171
+ related: #1211266
+
+* Thu Jul 02 2015 jchaloup <jchaloup@redhat.com> - 0.20.2-0.1.gitef41ceb
+- Bump to upstream ef41ceb3e477ceada84c5522f429f02ab0f5948e
+ related: #1211266
+
+* Tue Jun 30 2015 jchaloup <jchaloup@redhat.com> - 0.20.0-0.3.git835eded
+- Bump to upstream 835eded2943dfcf13a89518715e4be842a6a3ac0
+- Generate missing man pages
+ related: #1211266
+
+* Mon Jun 29 2015 jchaloup <jchaloup@redhat.com> - 0.20.0-0.2.git1c0b765
+- Bump to upstream 1c0b765df6dabfe9bd0e20489ed3bd18e6b3bda8
+ Comment out missing man pages
+ related: #1211266
+
+* Fri Jun 26 2015 jchaloup <jchaloup@redhat.com> - 0.20.0-0.1.git8ebd896
+- Bump to upstream 8ebd896351513d446d56bc5785c070d2909226a3
+ related: #1211266
+
+* Fri Jun 26 2015 jchaloup <jchaloup@redhat.com> - 0.19.3-0.6.git712f303
+- Bump to upstream 712f303350b35e70a573f3cb19193c8ec7ee7544
+ related: #1211266
+
+* Thu Jun 25 2015 jchaloup <jchaloup@redhat.com> - 0.19.3-0.5.git2803b86
+- Bump to upstream 2803b86a42bf187afa816a7ce14fec754cc2af51
+ related: #1211266
+
+* Wed Jun 24 2015 Eric Paris <eparis@redhat.com> - 0.19.3-0.4.git5b4dc4e
+- Set CAP_NET_BIND_SERVICE on the kube-apiserver so it can use 443
+
+* Wed Jun 24 2015 jchaloup <jchaloup@redhat.com> - 0.19.3-0.3.git5b4dc4e
+- Bump to upstream 5b4dc4edaa14e1ab4e3baa19df0388fa54dab344
+ pkg/cloudprovider/* packages does not conform to golang language specification
+ related: #1211266
+
+* Tue Jun 23 2015 jchaloup <jchaloup@redhat.com> - 0.19.3-0.2.gita2ce3ea
+- Bump to upstream a2ce3ea5293553b1fe0db3cbc6d53bdafe061d79
+ related: #1211266
+
+* Mon Jun 22 2015 jchaloup <jchaloup@redhat.com> - 0.19.1-0.1.gitff0546d
+- Bump to upstream ff0546da4fc23598de59db9f747c535545036463
+ related: #1211266
+
+* Fri Jun 19 2015 jchaloup <jchaloup@redhat.com> - 0.19.0-0.7.gitb2e9fed
+- Bump to upstream b2e9fed3490274509506285bdba309c50afb5c39
+ related: #1211266
+
+* Thu Jun 18 2015 jchaloup <jchaloup@redhat.com> - 0.19.0-0.6.gitf660940
+- Bump to upstream f660940dceb3fe6ffb1b14ba495a47d91b5cd910
+ related: #1211266
+
+* Wed Jun 17 2015 jchaloup <jchaloup@redhat.com> - 0.19.0-0.5.git43889c6
+- Bump to upstream 43889c612c4d396dcd8fbf3fbd217e106eaf5bce
+ related: #1211266
+
+* Tue Jun 16 2015 jchaloup <jchaloup@redhat.com> - 0.19.0-0.4.gita8269e3
+- Bump to upstream a8269e38c9e2bf81ba18cd6420e2309745d5b0b9
+ related: #1211266
+
+* Sun Jun 14 2015 jchaloup <jchaloup@redhat.com> - 0.19.0-0.3.git5e5c1d1
+- Bump to upstream 5e5c1d10976f2f26d356ca60ef7d0d715c9f00a2
+ related: #1211266
+
+* Fri Jun 12 2015 jchaloup <jchaloup@redhat.com> - 0.19.0-0.2.git0ca96c3
+- Bump to upstream 0ca96c3ac8b47114169f3b716ae4521ed8c7657c
+ related: #1211266
+
+* Thu Jun 11 2015 jchaloup <jchaloup@redhat.com> - 0.19.0-0.1.git5a02fc0
+- Bump to upstream 5a02fc07d8a943132b9e68fe7169778253318487
+ related: #1211266
+
+* Wed Jun 10 2015 jchaloup <jchaloup@redhat.com> - 0.18.2-0.3.git0dfb681
+- Bump to upstream 0dfb681ba5d5dba535895ace9d650667904b5df7
+ related: #1211266
+
+* Tue Jun 09 2015 jchaloup <jchaloup@redhat.com> - 0.18.2-0.2.gitb68e08f
+- golang-cover is not needed
+
+* Tue Jun 09 2015 jchaloup <jchaloup@redhat.com> - 0.18.2-0.1.gitb68e08f
+- Bump to upstream b68e08f55f5ae566c4ea3905d0993a8735d6d34f
+ related: #1211266
+
+* Sat Jun 06 2015 jchaloup <jchaloup@redhat.com> - 0.18.1-0.3.git0f1c4c2
+- Bump to upstream 0f1c4c25c344f70c3592040b2ef092ccdce0244f
+ related: #1211266
+
+* Fri Jun 05 2015 jchaloup <jchaloup@redhat.com> - 0.18.1-0.2.git7309e1f
+- Bump to upstream 7309e1f707ea5dd08c51f803037d7d22c20e2b92
+ related: #1211266
+
+* Thu Jun 04 2015 jchaloup <jchaloup@redhat.com> - 0.18.1-0.1.gita161edb
+- Bump to upstream a161edb3960c01ff6e14813858c2eeb85910009b
+ related: #1211266
+
+* Wed Jun 03 2015 jchaloup <jchaloup@redhat.com> - 0.18.0-0.3.gitb5a91bd
+- Bump to upstream b5a91bda103ed2459f933959241a2b57331747ba
+- Don't run %check section (kept only for local run). Tests are now handled via CI.
+ related: #1211266
+
+* Tue Jun 02 2015 jchaloup <jchaloup@redhat.com> - 0.18.0-0.2.git5520386
+- Bump to upstream 5520386b180d3ddc4fa7b7dfe6f52642cc0c25f3
+ related: #1211266
+
+* Mon Jun 01 2015 jchaloup <jchaloup@redhat.com> - 0.18.0-0.1.git0bb78fe
+- Bump to upstream 0bb78fe6c53ce38198cc3805c78308cdd4805ac8
+ related: #1211266
+
+* Fri May 29 2015 jchaloup <jchaloup@redhat.com> - 0.17.1-6
+- Bump to upstream ed4898d98c46869e9cbdb44186dfdeda9ff80cc2
+ related: #1211266
+
+* Thu May 28 2015 jchaloup <jchaloup@redhat.com> - 0.17.1-5
+- Bump to upstream 6fa2777e26559fc008eacac83eb165d25bd9a7de
+ related: #1211266
+
+* Tue May 26 2015 jchaloup <jchaloup@redhat.com> - 0.17.1-4
+- Bump to upstream 01fcb58673001e56c69e128ab57e0c3f701aeea5
+ related: #1211266
+
+* Mon May 25 2015 jchaloup <jchaloup@redhat.com> - 0.17.1-3
+- Decompose package into master and node subpackage.
+ Thanks to Avesh for testing and patience.
+ related: #1211266
+
+* Mon May 25 2015 jchaloup <jchaloup@redhat.com> - 0.17.1-2
+- Bump to upstream cf7b0bdc2a41d38613ac7f8eeea91cae23553fa2
+ related: #1211266
+
+* Fri May 22 2015 jchaloup <jchaloup@redhat.com> - 0.17.1-1
+- Bump to upstream d9d12fd3f7036c92606fc3ba9046b365212fcd70
+ related: #1211266
+
+* Wed May 20 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-12
+- Bump to upstream a76bdd97100c66a46e2b49288540dcec58a954c4
+ related: #1211266
+
+* Tue May 19 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-11
+- Bump to upstream 10339d72b66a31592f73797a9983e7c207481b22
+ related: #1211266
+
+* Mon May 18 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-10
+- Bump to upstream efb42b302d871f7217394205d84e5ae82335d786
+ related: #1211266
+
+* Sat May 16 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-9
+- Bump to upstream d51e131726b925e7088b90915e99042459b628e0
+ related: #1211266
+
+* Fri May 15 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-8
+- Bump to upstream 1ee33ac481a14db7b90e3bbac8cec4ceea822bfb
+ related: #1211266
+
+* Fri May 15 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-7
+- Bump to upstream d3c6fb0d6a13c0177dcd67556d72963c959234ea
+ related: #1211266
+
+* Fri May 15 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-6
+- Bump to upstream f57f31783089f41c0bdca8cb87a1001ca94e1a45
+ related: #1211266
+
+* Thu May 14 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-5
+- Bump to upstream c90d381d0d5cf8ab7b8412106f5a6991d7e13c7d
+ related: #1211266
+
+* Thu May 14 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-4
+- Bump to upstream 5010b2dde0f9b9eb820fe047e3b34bc9fa6324de
+- Add debug info
+ related: #1211266
+
+* Wed May 13 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-3
+- Bump to upstream ec19d41b63f5fe7b2c939e7738a41c0fbe65d796
+ related: #1211266
+
+* Tue May 12 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-2
+- Provide /usr/bin/kube-version-change binary
+ related: #1211266
+
+* Tue May 12 2015 jchaloup <jchaloup@redhat.com> - 0.17.0-1
+- Bump to upstream 962f10ee580eea30e5f4ea725c4e9e3743408a58
+ related: #1211266
+
+* Mon May 11 2015 jchaloup <jchaloup@redhat.com> - 0.16.2-7
+- Bump to upstream 63182318c5876b94ac9b264d1224813b2b2ab541
+ related: #1211266
+
+* Fri May 08 2015 jchaloup <jchaloup@redhat.com> - 0.16.2-6
+- Bump to upstream d136728df7e2694df9e082902f6239c11b0f2b00
+- Add NetworkManager as dependency for /etc/resolv.conf
+ related: #1211266
+
+* Thu May 07 2015 jchaloup <jchaloup@redhat.com> - 0.16.2-5
+- Bump to upstream ca0f678b9a0a6dc795ac7a595350d0dbe9d0ac3b
+ related: #1211266
+
+* Wed May 06 2015 jchaloup <jchaloup@redhat.com> - 0.16.2-4
+- Add docs to kubernetes-unit-test
+ related: #1211266
+
+* Wed May 06 2015 jchaloup <jchaloup@redhat.com> - 0.16.2-3
+- Bump to upstream 3a24c0e898cb3060d7905af6df275a3be562451d
+ related: #1211266
+
+* Tue May 05 2015 jchaloup <jchaloup@redhat.com> - 0.16.2-2
+- Add api and README.md to kubernetes-unit-test
+ related: #1211266
+
+* Tue May 05 2015 jchaloup <jchaloup@redhat.com> - 0.16.2-1
+- Bump to upstream 72048a824ca16c3921354197953fabecede5af47
+ related: #1211266
+
+* Mon May 04 2015 jchaloup <jchaloup@redhat.com> - 0.16.1-2
+- Bump to upstream 1dcd80cdf3f00409d55cea1ef0e7faef0ae1d656
+ related: #1211266
+
+* Sun May 03 2015 jchaloup <jchaloup@redhat.com> - 0.16.1-1
+- Bump to upstream 86751e8c90a3c0e852afb78d26cb6ba8cdbc37ba
+ related: #1211266
+
+* Fri May 01 2015 jchaloup <jchaloup@redhat.com> - 0.16.0-2
+- Bump to upstream 72708d74b9801989ddbdc8403fc5ba4aafb7c1ef
+ related: #1211266
+
+* Wed Apr 29 2015 jchaloup <jchaloup@redhat.com> - 0.16.0-1
+- Bump to upstream 7dcce2eeb7f28643d599c8b6a244523670d17c93
+ related: #1211266
+
+* Tue Apr 28 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-10
+- Add unit-test subpackage
+ related: #1211266
+
+* Tue Apr 28 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-9
+- Bump to upstream 99fc906f78cd2bcb08536c262867fa6803f816d5
+ related: #1211266
+
+* Mon Apr 27 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-8
+- Bump to upstream 051dd96c542799dfab39184d2a7c8bacf9e88d85
+ related: #1211266
+
+* Fri Apr 24 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-7
+- Bump to upstream 9f753c2592481a226d72cea91648db8fb97f0da8
+ related: #1211266
+
+* Thu Apr 23 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-6
+- Bump to upstream cf824ae5e07965ba0b4b15ee88e08e2679f36978
+ related: #1211266
+
+* Tue Apr 21 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-5
+- Bump to upstream 21788d8e6606038a0a465c97f5240b4e66970fbb
+ related: #1211266
+
+* Mon Apr 20 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-4
+- Bump to upstream eb1ea269954da2ce557f3305fa88d42e3ade7975
+ related: #1211266
+
+* Fri Apr 17 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-3
+- Obsolete cadvisor as it is integrated in kubelet
+ related: #1211266
+
+* Wed Apr 15 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-0.2.git0ea87e4
+- Bump to upstream 0ea87e486407298dc1e3126c47f4076b9022fb09
+ related: #1211266
+
+* Tue Apr 14 2015 jchaloup <jchaloup@redhat.com> - 0.15.0-0.1.gitd02139d
+- Bump to upstream d02139d2b454ecc5730cc535d415c1963a7fb2aa
+ related: #1211266
+
+* Sun Apr 12 2015 jchaloup <jchaloup@redhat.com> - 0.14.2-0.2.gitd577db9
+- Bump to upstream d577db99873cbf04b8e17b78f17ec8f3a27eca30
+
+* Wed Apr 08 2015 jchaloup <jchaloup@redhat.com> - 0.14.2-0.1.git2719194
+- Bump to upstream 2719194154ffd38fd1613699a9dd10a00909957e
+ Use etcd-2.0.8 and higher
+
+* Tue Apr 07 2015 jchaloup <jchaloup@redhat.com> - 0.14.1-0.2.gitd2f4734
+- Bump to upstream d2f473465738e6b6f7935aa704319577f5e890ba
+
+* Thu Apr 02 2015 jchaloup <jchaloup@redhat.com> - 0.14.1-0.1.gita94ffc8
+- Bump to upstream a94ffc8625beb5e2a39edb01edc839cb8e59c444
+
+* Wed Apr 01 2015 jchaloup <jchaloup@redhat.com> - 0.14.0-0.2.git8168344
+- Bump to upstream 81683441b96537d4b51d146e39929b7003401cd5
+
+* Tue Mar 31 2015 jchaloup <jchaloup@redhat.com> - 0.14.0-0.1.git9ed8761
+- Bump to upstream 9ed87612d07f75143ac96ad90ff1ff68f13a2c67
+- Remove [B]R from devel branch until the package has stable API
+
+* Mon Mar 30 2015 jchaloup <jchaloup@redhat.com> - 0.13.2-0.6.git8a7a127
+- Bump to upstream 8a7a127352263439e22253a58628d37a93fdaeb2
+
+* Fri Mar 27 2015 jchaloup <jchaloup@redhat.com> - 0.13.2-0.5.git8d94c43
+- Bump to upstream 8d94c43e705824f23791b66ad5de4ea095d5bb32
+ resolves: #1205362
+
+* Wed Mar 25 2015 jchaloup <jchaloup@redhat.com> - 0.13.2-0.4.git455fe82
+- Bump to upstream 455fe8235be8fd9ba0ce21bf4f50a69d42e18693
+
+* Mon Mar 23 2015 jchaloup <jchaloup@redhat.com> - 0.13.2-0.3.gitef75888
+- Remove runtime dependency on etcd
+ resolves: #1202923
+
+* Sun Mar 22 2015 jchaloup <jchaloup@redhat.com> - 0.13.2-0.2.gitef75888
+- Bump to upstream ef758881d108bb53a128126c503689104d17f477
+
+* Fri Mar 20 2015 jchaloup <jchaloup@redhat.com> - 0.13.2-0.1.gita8f2cee
+- Bump to upstream a8f2cee8c5418676ee33a311fad57d6821d3d29a
+
+* Fri Mar 13 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.9.git53b25a7
+- Bump to upstream 53b25a7890e31bdec6f2a95b32200d6cc27ae2ca
+ fix kube-proxy.service and kubelet
+ resolves: #1200919 #1200924
+
+* Fri Mar 13 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.8.git39dceb1
+- Bump to upstream 39dceb13a511a83963a766a439cb386d10764310
+
+* Thu Mar 12 2015 Eric Paris <eparis@redhat.com> - 0.12.0-0.7.gita3fd0a9
+- Move from /etc/tmpfiles.d to %{_tmpfilesdir}
+ resolves: #1200969
+
+* Thu Mar 12 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.6.gita3fd0a9
+- Place contrib/init/systemd/tmpfiles.d/kubernetes.conf to /etc/tmpfiles.d/kubernetes.conf
+
+* Thu Mar 12 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.5.gita3fd0a9
+- Bump to upstream a3fd0a9fd516bb6033f32196ae97aaecf8c096b1
+
+* Tue Mar 10 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.4.gita4d871a
+- Bump to upstream a4d871a10086436557f804930812f2566c9d4d39
+
+* Fri Mar 06 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.3.git2700871
+- Bump to upstream 2700871b049d5498167671cea6de8317099ad406
+
+* Thu Mar 05 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.2.git8b627f5
+- Bump to upstream 8b627f516fd3e4f62da90d401ceb3d38de6f8077
+
+* Tue Mar 03 2015 jchaloup <jchaloup@redhat.com> - 0.12.0-0.1.gitecca426
+- Bump to upstream ecca42643b91a7117de8cd385b64e6bafecefd65
+
+* Mon Mar 02 2015 jchaloup <jchaloup@redhat.com> - 0.11.0-0.5.git6c5b390
+- Bump to upstream 6c5b390160856cd8334043344ef6e08568b0a5c9
+
+* Sat Feb 28 2015 jchaloup <jchaloup@redhat.com> - 0.11.0-0.4.git0fec31a
+- Bump to upstream 0fec31a11edff14715a1efb27f77262a7c3770f4
+
+* Fri Feb 27 2015 jchaloup <jchaloup@redhat.com> - 0.11.0-0.3.git08402d7
+- Bump to upstream 08402d798c8f207a2e093de5a670c5e8e673e2de
+
+* Wed Feb 25 2015 jchaloup <jchaloup@redhat.com> - 0.11.0-0.2.git86434b4
+- Bump to upstream 86434b4038ab87ac40219562ad420c3cc58c7c6b
+
+* Tue Feb 24 2015 jchaloup <jchaloup@redhat.com> - 0.11.0-0.1.git754a2a8
+- Bump to upstream 754a2a8305c812121c3845d8293efdd819b6a704
+ turn off integration tests until "FAILED: unexpected endpoints:
+ timed out waiting for the condition" problem is resolved
+ Adding back devel subpackage ([B]R list outdated)
+
+* Fri Feb 20 2015 jchaloup <jchaloup@redhat.com> - 0.10.1-0.3.git4c87805
+- Bump to upstream 4c87805870b1b22e463c4bd711238ef68c77f0af
+
+* Tue Feb 17 2015 jchaloup <jchaloup@redhat.com> - 0.10.1-0.2.git6f84bda
+- Bump to upstream 6f84bdaba853872dbac69c84d3ab4b6964e85d8c
+
+* Tue Feb 17 2015 jchaloup <jchaloup@redhat.com> - 0.10.1-0.1.git7d6130e
+- Bump to upstream 7d6130edcdfabd7dd2e6a06fdc8fe5e333f07f5c
+
+* Sat Feb 07 2015 jchaloup <jchaloup@redhat.com> - 0.9.1-0.7.gitc9c98ab
+- Bump to upstream c9c98ab19eaa6f0b2ea17152c9a455338853f4d0
+ Since some dependencies are broken, we can not build Kubernetes from Fedora deps.
+ Switching to vendored source codes until Go draft is resolved
+
+* Wed Feb 04 2015 jchaloup <jchaloup@redhat.com> - 0.9.1-0.6.git7f5ed54
+- Bump to upstream 7f5ed541f794348ae6279414cf70523a4d5133cc
+
+* Tue Feb 03 2015 jchaloup <jchaloup@redhat.com> - 0.9.1-0.5.git2ac6bbb
+- Bump to upstream 2ac6bbb7eba7e69eac71bd9acd192cda97e67641
+
+* Mon Feb 02 2015 jchaloup <jchaloup@redhat.com> - 0.9.1-0.4.gite335e2d
+- Bump to upstream e335e2d3e26a9a58d3b189ccf41ceb3770d1bfa9
+
+* Fri Jan 30 2015 jchaloup <jchaloup@redhat.com> - 0.9.1-0.3.git55793ac
+- Bump to upstream 55793ac2066745f7243c666316499e1a8cf074f0
+
+* Thu Jan 29 2015 jchaloup <jchaloup@redhat.com> - 0.9.1-0.2.gitca6de16
+- Bump to upstream ca6de16df7762d4fc9b4ad44baa78d22e3f30742
+
+* Tue Jan 27 2015 jchaloup <jchaloup@redhat.com> - 0.9.1-0.1.git3623a01
+- Bump to upstream 3623a01bf0e90de6345147eef62894057fe04b29
+- update tests for etcd-2.0
+
+* Thu Jan 22 2015 jchaloup <jchaloup@redhat.com> - 0.8.2-571.gitb2f287c
++- Bump to upstream b2f287c259d856f4c08052a51cd7772c563aff77
+
+* Thu Jan 22 2015 Eric Paris <eparis@redhat.com> - 0.8.2-570.gitb2f287c
+- patch kubelet service file to use docker.service not docker.socket
+
+* Wed Jan 21 2015 jchaloup <jchaloup@redhat.com> - 0.8.2-0.1.git5b04640
+- Bump to upstream 5b046406a957a1e7eda7c0c86dd7a89e9c94fc5f
+
+* Sun Jan 18 2015 jchaloup <jchaloup@redhat.com> - 0.8.0-126.0.git68298f0
+- Add some missing dependencies
+- Add devel subpackage
+
+* Fri Jan 09 2015 Eric Paris <eparis@redhat.com> - 0.8.0-125.0.git68298f0
+- Bump to upstream 68298f08a4980f95dfbf7b9f58bfec1808fb2670
+
+* Tue Dec 16 2014 Eric Paris <eparis@redhat.com> - 0.7.0-18.0.git52e165a
+- Bump to upstream 52e165a4fd720d1703ebc31bd6660e01334227b8
+
+* Mon Dec 15 2014 Eric Paris <eparis@redhat.com> - 0.6-297.0.git5ef34bf
+- Bump to upstream 5ef34bf52311901b997119cc49eff944c610081b
+
+* Wed Dec 03 2014 Eric Paris <eparis@redhat.com>
+- Replace patch to use old googlecode/go.net/ with BuildRequires on golang.org/x/net/
+
+* Tue Dec 02 2014 Eric Paris <eparis@redhat.com> - 0.6-4.0.git993ef88
+- Bump to upstream 993ef88eec9012b221f79abe8f2932ee97997d28
+
+* Mon Dec 01 2014 Eric Paris <eparis@redhat.com> - 0.5-235.0.git6aabd98
+- Bump to upstream 6aabd9804fb75764b70e9172774002d4febcae34
+
+* Wed Nov 26 2014 Eric Paris <eparis@redhat.com> - 0.5-210.0.gitff1e9f4
+- Bump to upstream ff1e9f4c191342c24974c030e82aceaff8ea9c24
+
+* Tue Nov 25 2014 Eric Paris <eparis@redhat.com> - 0.5-174.0.git64e07f7
+- Bump to upstream 64e07f7fe03d8692c685b09770c45f364967a119
+
+* Mon Nov 24 2014 Eric Paris <eparis@redhat.com> - 0.5-125.0.git162e498
+- Bump to upstream 162e4983b947d2f6f858ca7607869d70627f5dff
+
+* Fri Nov 21 2014 Eric Paris <eparis@redhat.com> - 0.5-105.0.git3f74a1e
+- Bump to upstream 3f74a1e9f56b3c3502762930c0c551ccab0557ea
+
+* Thu Nov 20 2014 Eric Paris <eparis@redhat.com> - 0.5-65.0.gitc6158b8
+- Bump to upstream c6158b8aa9c40fbf1732650a8611429536466b21
+- include go-restful build requirement
+
+* Tue Nov 18 2014 Eric Paris <eparis@redhat.com> - 0.5-14.0.gitdf0981b
+- Bump to upstream df0981bc01c5782ad30fc45cb6f510f365737fc1
+
+* Tue Nov 11 2014 Eric Paris <eparis@redhat.com> - 0.4-680.0.git30fcf24
+- Bump to upstream 30fcf241312f6d0767c7d9305b4c462f1655f790
+
+* Mon Nov 10 2014 Eric Paris <eparis@redhat.com> - 0.4-633.0.git6c70227
+- Bump to upstream 6c70227a2eccc23966d32ea6d558ee05df46e400
+
+* Fri Nov 07 2014 Eric Paris <eparis@redhat.com> - 0.4-595.0.gitb695650
+- Bump to upstream b6956506fa2682afa93770a58ea8c7ba4b4caec1
+
+* Thu Nov 06 2014 Eric Paris <eparis@redhat.com> - 0.4-567.0.git3b1ef73
+- Bump to upstream 3b1ef739d1fb32a822a22216fb965e22cdd28e7f
+
+* Thu Nov 06 2014 Eric Paris <eparis@redhat.com> - 0.4-561.0.git06633bf
+- Bump to upstream 06633bf4cdc1ebd4fc848f85025e14a794b017b4
+- Make spec file more RHEL/CentOS friendly
+
+* Tue Nov 04 2014 Eric Paris <eparis@redhat.com - 0.4-510.0.git5a649f2
+- Bump to upstream 5a649f2b9360a756fc8124897d3453a5fa9473a6
+
+* Mon Nov 03 2014 Eric Paris <eparis@redhat.com - 0.4-477.0.gita4abafe
+- Bump to upstream a4abafea02babc529c9b5b9c825ba0bb3eec74c6
+
+* Mon Nov 03 2014 Eric Paris <eparis@redhat.com - 0.4-453.0.git808be2d
+- Bump to upstream 808be2d13b7bf14a3cf6985bc7c9d02f48a3d1e0
+- Includes upstream change to remove --machines from the APIServer
+- Port to new build system
+- Start running %check tests again
+
+* Fri Oct 31 2014 Eric Paris <eparis@redhat.com - 0.4+-426.0.gita18cdac
+- Bump to upstream a18cdac616962a2c486feb22afa3538fc3cf3a3a
+
+* Thu Oct 30 2014 Eric Paris <eparis@redhat.com - 0.4+-397.0.git78df011
+- Bump to upstream 78df01172af5cc132b7276afb668d31e91e61c11
+
+* Wed Oct 29 2014 Eric Paris <eparis@redhat.com - 0.4+-0.9.git8e1d416
+- Bump to upstream 8e1d41670783cb75cf0c5088f199961a7d8e05e5
+
+* Tue Oct 28 2014 Eric Paris <eparis@redhat.com - 0.4-0.8.git1c61486
+- Bump to upstream 1c61486ec343246a81f62b4297671217c9576df7
+
+* Mon Oct 27 2014 Eric Paris <eparis@redhat.com - 0.4-0.7.gitdc7e3d6
+- Bump to upstream dc7e3d6601a89e9017ca9db42c09fd0ecb36bb36
+
+* Fri Oct 24 2014 Eric Paris <eparis@redhat.com - 0.4-0.6.gite46af6e
+- Bump to upstream e46af6e37f6e6965a63edb8eb8f115ae8ef41482
+
+* Thu Oct 23 2014 Eric Paris <eparis@redhat.com - 0.4-0.5.git77d2815
+- Bump to upstream 77d2815b86e9581393d7de4379759c536df89edc
+
+* Wed Oct 22 2014 Eric Paris <eparis@redhat.com - 0.4-0.4.git97dd730
+- Bump to upstream 97dd7302ac2c2b9458a9348462a614ebf394b1ed
+- Use upstream kubectl bash completion instead of in-repo
+- Fix systemd_post and systemd_preun since we are using upstream service files
+
+* Tue Oct 21 2014 Eric Paris <eparis@redhat.com - 0.4-0.3.gite868642
+- Bump to upstream e8686429c4aa63fc73401259c8818da168a7b85e
+
+* Mon Oct 20 2014 Eric Paris <eparis@redhat.com - 0.4-0.2.gitd5377e4
+- Bump to upstream d5377e4a394b4fc6e3088634729b538eac124b1b
+- Use in tree systemd unit and Environment files
+- Include kubectl bash completion from outside tree
+
+* Fri Oct 17 2014 Eric Paris <eparis@redhat.com - 0.4-0.1.gitb011263
+- Bump to upstream b01126322b826a15db06f6eeefeeb56dc06db7af
+- This is a major non backward compatible change.
+
+* Thu Oct 16 2014 Eric Paris <eparis@redhat.com> - 0.4-0.0.git4452163
+- rebase to v0.4
+- include man pages
+
+* Tue Oct 14 2014 jchaloup <jchaloup@redhat.com> - 0.3-0.3.git98ac8e1
+- create /var/lib/kubelet
+- Use bash completions from upstream
+- Bump to upstream 98ac8e178fcf1627399d659889bcb5fe25abdca4
+- all by Eric Paris
+
+* Mon Sep 29 2014 Jan Chaloupka <jchaloup@redhat.com> - 0.3-0.2.git88fdb65
+- replace * with coresponding files
+- remove dependency on gcc
+
+* Wed Sep 24 2014 Eric Paris <eparis@redhat.com - 0.3-0.1.git88fdb65
+- Bump to upstream 88fdb659bc44cf2d1895c03f8838d36f4d890796
+
+* Tue Sep 23 2014 Eric Paris <eparis@redhat.com - 0.3-0.0.gitbab5082
+- Bump to upstream bab5082a852218bb65aaacb91bdf599f9dd1b3ac
+
+* Fri Sep 19 2014 Eric Paris <eparis@redhat.com - 0.2-0.10.git06316f4
+- Bump to upstream 06316f486127697d5c2f5f4c82963dec272926cf
+
+* Thu Sep 18 2014 Eric Paris <eparis@redhat.com - 0.2-0.9.gitf7a5ec3
+- Bump to upstream f7a5ec3c36bd40cc2216c1da331ab647733769dd
+
+* Wed Sep 17 2014 Eric Paris <eparis@redhat.com - 0.2-0.8.gitac8ee45
+- Try to intelligently determine the deps
+
+* Wed Sep 17 2014 Eric Paris <eparis@redhat.com - 0.2-0.7.gitac8ee45
+- Bump to upstream ac8ee45f4fc4579b3ed65faafa618de9c0f8fb26
+
+* Mon Sep 15 2014 Eric Paris <eparis@redhat.com - 0.2-0.5.git24b5b7e
+- Bump to upstream 24b5b7e8d3a8af1eecf4db40c204e3c15ae955ba
+
+* Thu Sep 11 2014 Eric Paris <eparis@redhat.com - 0.2-0.3.gitcc7999c
+- Bump to upstream cc7999c00a40df21bd3b5e85ecea3b817377b231
+
+* Wed Sep 10 2014 Eric Paris <eparis@redhat.com - 0.2-0.2.git60d4770
+- Add bash completions
+
+* Wed Sep 10 2014 Eric Paris <eparis@redhat.com - 0.2-0.1.git60d4770
+- Bump to upstream 60d4770127d22e51c53e74ca94c3639702924bd2
+
+* Mon Sep 08 2014 Lokesh Mandvekar <lsm5@fedoraproject.org> - 0.1-0.4.git6ebe69a
+- prefer autosetup instead of setup (revert setup change in 0-0.3.git)
+https://fedoraproject.org/wiki/Autosetup_packaging_draft
+- revert version number to 0.1
+
+* Mon Sep 08 2014 Lokesh Mandvekar <lsm5@fedoraproject.org> - 0-0.3.git6ebe69a
+- gopath defined in golang package already
+- package owns /etc/kubernetes
+- bash dependency implicit
+- keep buildroot/$RPM_BUILD_ROOT macros consistent
+- replace with macros wherever possible
+- set version, release and source tarball prep as per
+https://fedoraproject.org/wiki/Packaging:SourceURL#Github
+
+* Mon Sep 08 2014 Eric Paris <eparis@redhat.com>
+- make services restart automatically on error
+
+* Sat Sep 06 2014 Eric Paris <eparis@redhat.com - 0.1-0.1.0.git6ebe69a8
+- Bump to upstream 6ebe69a8751508c11d0db4dceb8ecab0c2c7314a
+
+* Wed Aug 13 2014 Eric Paris <eparis@redhat.com>
+- update to upstream
+- redo build to use project scripts
+- use project scripts in %check
+- rework deletion of third_party packages to easily detect changes
+- run apiserver and controller-manager as non-root
+
+* Mon Aug 11 2014 Adam Miller <maxamillion@redhat.com>
+- update to upstream
+- decouple the rest of third_party
+
+* Thu Aug 7 2014 Eric Paris <eparis@redhat.com>
+- update to head
+- update package to include config files
+
+* Wed Jul 16 2014 Colin Walters <walters@redhat.com>
+- Initial package
diff --git a/remove-apiserver-add-kube-prefix-for-hyperkube.patch b/remove-apiserver-add-kube-prefix-for-hyperkube.patch
new file mode 100644
index 0000000..c498f0d
--- /dev/null
+++ b/remove-apiserver-add-kube-prefix-for-hyperkube.patch
@@ -0,0 +1,66 @@
+From f8748053d34c651230fbc317e25d74d404548c66 Mon Sep 17 00:00:00 2001
+From: Jan Chaloupka <jchaloup@redhat.com>
+Date: Fri, 26 Feb 2016 16:17:24 +0100
+Subject: [PATCH] remove apiserver, add kube-prefix for hyperkube
+
+---
+ cmd/hyperkube/kube-controller-manager.go | 2 +-
+ cmd/hyperkube/kube-proxy.go | 2 +-
+ cmd/hyperkube/kube-scheduler.go | 2 +-
+ cmd/hyperkube/main.go | 1 -
+ 4 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/cmd/hyperkube/kube-controller-manager.go b/cmd/hyperkube/kube-controller-manager.go
+index 57d4856..1fc5107 100644
+--- a/cmd/hyperkube/kube-controller-manager.go
++++ b/cmd/hyperkube/kube-controller-manager.go
+@@ -29,7 +29,7 @@ func NewKubeControllerManager() *Server {
+ s := options.NewCMServer()
+
+ hks := Server{
+- SimpleUsage: "controller-manager",
++ SimpleUsage: "kube-controller-manager",
+ Long: "A server that runs a set of active components. This includes replication controllers, service endpoints and nodes.",
+ Run: func(_ *Server, args []string) error {
+ return app.Run(s)
+diff --git a/cmd/hyperkube/kube-proxy.go b/cmd/hyperkube/kube-proxy.go
+index 2f8678d..0a010d8 100644
+--- a/cmd/hyperkube/kube-proxy.go
++++ b/cmd/hyperkube/kube-proxy.go
+@@ -29,7 +29,7 @@ func NewKubeProxy() *Server {
+ config := options.NewProxyConfig()
+
+ hks := Server{
+- SimpleUsage: "proxy",
++ SimpleUsage: "kube-proxy",
+ Long: `The Kubernetes proxy server is responsible for taking traffic directed at
+ services and forwarding it to the appropriate pods. It generally runs on
+ nodes next to the Kubelet and proxies traffic from local pods to remote pods.
+diff --git a/cmd/hyperkube/kube-scheduler.go b/cmd/hyperkube/kube-scheduler.go
+index 799038d..4be08e1 100644
+--- a/cmd/hyperkube/kube-scheduler.go
++++ b/cmd/hyperkube/kube-scheduler.go
+@@ -29,7 +29,7 @@ func NewScheduler() *Server {
+ s := options.NewSchedulerServer()
+
+ hks := Server{
+- SimpleUsage: "scheduler",
++ SimpleUsage: "kube-scheduler",
+ Long: "Implements a Kubernetes scheduler. This will assign pods to kubelets based on capacity and constraints.",
+ Run: func(_ *Server, _ []string) error {
+ return app.Run(s)
+diff --git a/cmd/hyperkube/main.go b/cmd/hyperkube/main.go
+index 4d9c499..8b060ba 100644
+--- a/cmd/hyperkube/main.go
++++ b/cmd/hyperkube/main.go
+@@ -32,7 +32,6 @@ func main() {
+ }
+
+ hk.AddServer(NewKubectlServer())
+- hk.AddServer(NewKubeAPIServer())
+ hk.AddServer(NewKubeControllerManager())
+ hk.AddServer(NewScheduler())
+ hk.AddServer(NewKubelet())
+--
+1.9.3
+
diff --git a/sources b/sources
index e69de29..ac31992 100644
--- a/sources
+++ b/sources
@@ -0,0 +1,3 @@
+3d6fb2bfdd07be4f6c27dd317669087e contrib-18bb93d.tar.gz
+9bf5c15e6609e0fb0ba08a119e1a5f6a kubernetes-4a3f9c5.tar.gz
+93616c18161d70fe0dc949e65f71688a origin-2e62fab.tar.gz