// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "fmt" "os" "path/filepath" "strings" "go.wit.com/log" ) func doWITCOM() { pwd, err := os.Getwd() if err != nil { return } files, err := scanForGoFiles(pwd) if err != nil { return } for _, file := range files { addCommonHeader(file) } } // add a common header for WIT files // add a common header for WIT files func addCommonHeader(filename string) error { // read in the .proto file data, err := os.ReadFile(filename) if err != nil { log.Info("file read failed", filename, err) return err } var newfile string var start bool = true var found bool var done bool // drop the old copywrite lines for _, line := range strings.Split(string(data), "\n") { // first line must have WIT.COM if strings.HasPrefix(line, "//") && start { start = false if strings.Contains(line, "WIT.COM") { found = true } else { newfile += fmt.Sprintln(line) } continue } // dump every other comment if strings.HasPrefix(line, "//") && found { continue } else { found = false } // print the header once if !done { newfile += fmt.Sprintln("// Copyright 2017-2025 WIT.COM Inc. All rights reserved.") newfile += fmt.Sprintln("// Use of this source code is governed by the GPL 3.0") newfile += fmt.Sprintln("") done = true } newfile += fmt.Sprintln(line) } pf, err := os.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { log.Info("file open error. permissions?", filename, err) return err } // trim trailing empty lines from the new file newfile = strings.TrimSpace(newfile) fmt.Fprintln(pf, newfile) pf.Close() return nil } // look for any .go files. do not enter directories func scanForGoFiles(startDir string) ([]string, error) { var files []string err := filepath.Walk(startDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } // ignore the start dir if startDir == path { return nil } if strings.HasSuffix(path, ".go") { files = append(files, path) } if strings.HasSuffix(path, ".proto") { files = append(files, path) } // don't go into any directories if info.IsDir() { return filepath.SkipDir } return nil }) return files, err }