Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

deprecated flag handling #22

Merged
merged 1 commit into from
Mar 19, 2019
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions deprecatedflags/deprecatedflags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
Copyright 2019 The Kubernetes Authors.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Package deprecatedflags can be used to declare a flag that is no
// longer supported.
package deprecatedflags

import (
"flag"

"k8s.io/klog"
)

// Add defines a deprecated option which used to take some kind of
// value. The type of the argument no longer matters, it gets ignored
// and instead using the option triggers a deprecation warning. The
// return code can be safely ignored and is only provided to support
// replacing functions like flag.Int in a global variable section.
func Add(name string) bool {
flag.Var(deprecated{name: name}, name, "This option is deprecated.")
return true
}

// AddBool defines a deprecated boolean option. Otherwise it behaves
// like Add.
func AddBool(name string) bool {
flag.Var(deprecated{name: name, isBool: true}, name, "This option is deprecated.")
return true
}

type deprecated struct {
name string
isBool bool
}

var _ flag.Value = deprecated{}

func (d deprecated) String() string { return "" }
func (d deprecated) Set(value string) error {
klog.Warningf("Warning: option %s=%q is deprecated and has no effect", d.name, value)
return nil
}
func (d deprecated) Type() string { return "" }
func (d deprecated) IsBoolFlag() bool { return d.isBool }