117 lines
2.2 KiB
Go
117 lines
2.2 KiB
Go
// 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)
|
|
}
|
|
|
|
// don't go into any directories
|
|
if info.IsDir() {
|
|
return filepath.SkipDir
|
|
}
|
|
return nil
|
|
})
|
|
|
|
return files, err
|
|
}
|