mirror of
https://github.com/spf13/cobra
synced 2024-12-29 15:57:10 +00:00
d5bde60e02
Fix #540
118 lines
3.2 KiB
Go
118 lines
3.2 KiB
Go
// Copyright © 2015 Steve Francia <spf@spf13.com>.
|
|
//
|
|
// 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.
|
|
|
|
// Parts inspired by https://github.com/ryanuber/go-license
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// Licenses contains all possible licenses a user can choose from.
|
|
var Licenses = make(map[string]License)
|
|
|
|
// License represents a software license agreement, containing the Name of
|
|
// the license, its possible matches (on the command line as given to cobra),
|
|
// the header to be used with each file on the file's creating, and the text
|
|
// of the license
|
|
type License struct {
|
|
Name string // The type of license in use
|
|
PossibleMatches []string // Similar names to guess
|
|
Text string // License text data
|
|
Header string // License header for source files
|
|
}
|
|
|
|
func init() {
|
|
// Allows a user to not use a license.
|
|
Licenses["none"] = License{"None", []string{"none", "false"}, "", ""}
|
|
|
|
initApache2()
|
|
initMit()
|
|
initBsdClause3()
|
|
initBsdClause2()
|
|
initGpl2()
|
|
initGpl3()
|
|
initLgpl()
|
|
initAgpl()
|
|
}
|
|
|
|
// getLicense returns license specified by user in flag or in config.
|
|
// If user didn't specify the license, it returns Apache License 2.0.
|
|
//
|
|
// TODO: Inspect project for existing license
|
|
func getLicense() License {
|
|
// If explicitly flagged, use that.
|
|
if userLicense != "" {
|
|
return findLicense(userLicense)
|
|
}
|
|
|
|
// If user wants to have custom license, use that.
|
|
if viper.IsSet("license.header") || viper.IsSet("license.text") {
|
|
return License{Header: viper.GetString("license.header"),
|
|
Text: viper.GetString("license.text")}
|
|
}
|
|
|
|
// If user wants to have built-in license, use that.
|
|
if viper.IsSet("license") {
|
|
return findLicense(viper.GetString("license"))
|
|
}
|
|
|
|
// If user didn't set any license, use Apache 2.0 by default.
|
|
return Licenses["apache"]
|
|
}
|
|
|
|
func copyrightLine() string {
|
|
author := viper.GetString("author")
|
|
|
|
year := viper.GetString("year") // For tests.
|
|
if year == "" {
|
|
year = time.Now().Format("2006")
|
|
}
|
|
|
|
return "Copyright © " + year + " " + author
|
|
}
|
|
|
|
// findLicense looks for License object of built-in licenses.
|
|
// If it didn't find license, then the app will be terminated and
|
|
// error will be printed.
|
|
func findLicense(name string) License {
|
|
found := matchLicense(name)
|
|
if found == "" {
|
|
er("unknown license: " + name)
|
|
}
|
|
return Licenses[found]
|
|
}
|
|
|
|
// matchLicense compares the given a license name
|
|
// to PossibleMatches of all built-in licenses.
|
|
// It returns blank string, if name is blank string or it didn't find
|
|
// then appropriate match to name.
|
|
func matchLicense(name string) string {
|
|
if name == "" {
|
|
return ""
|
|
}
|
|
|
|
for key, lic := range Licenses {
|
|
for _, match := range lic.PossibleMatches {
|
|
if strings.EqualFold(name, match) {
|
|
return key
|
|
}
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|