// Copyright (c) Tailscale Inc & AUTHORS // SPDX-License-Identifier: BSD-3-Clause // Program addlicense adds a license header to a file. // It is intended for use with 'go generate', // so it has a slightly weird usage. package main import ( "flag" "fmt" "os" "os/exec" ) var ( file = flag.String("file", "", "file to modify") ) func usage() { fmt.Fprintf(os.Stderr, ` usage: addlicense -file FILE `[1:]) flag.PrintDefaults() fmt.Fprintf(os.Stderr, ` addlicense adds a Tailscale license to the beginning of file. It is intended for use with 'go generate', so it also runs a subcommand, which presumably creates the file. Sample usage: addlicense -file pull_strings.go stringer -type=pull `[1:]) os.Exit(2) } func main() { flag.Usage = usage flag.Parse() if len(flag.Args()) == 0 { flag.Usage() } cmd := exec.Command(flag.Arg(0), flag.Args()[1:]...) cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr err := cmd.Run() check(err) b, err := os.ReadFile(*file) check(err) f, err := os.OpenFile(*file, os.O_TRUNC|os.O_WRONLY, 0644) check(err) _, err = fmt.Fprint(f, license) check(err) _, err = f.Write(b) check(err) err = f.Close() check(err) } func check(err error) { if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } } var license = ` // Copyright (c) Tailscale Inc & AUTHORS // SPDX-License-Identifier: BSD-3-Clause `[1:]