| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package file
- import (
- "bufio"
- "fmt"
- "io"
- "os"
- "path/filepath"
- "strings"
- )
- func NewTemplate(dir, old, new string) error {
- return ReplacePackage(dir, old, new, []string{"vendor", ".git", ".idea"})
- }
- func ReplacePackageV2(dir string, old []string, ignoreFile []string) error {
- if old == nil || len(old) == 0 {
- return nil
- }
- files, err := GetAllFiles(dir, func(fileName string) bool {
- var pass = true
- if ignoreFile == nil || len(ignoreFile) == 0 {
- return true
- }
- for _, elem := range ignoreFile {
- if strings.Contains(fileName, elem) {
- pass = false
- break
- }
- }
- return pass
- })
- if err != nil {
- return err
- }
- for _, file := range files {
- err := ModifyFileV2(old, file)
- if err != nil {
- return err
- }
- }
- return nil
- }
- func ReplacePackage(dir, old, new string, ignoreFile []string) error {
- files, err := GetAllFiles(dir, func(fileName string) bool {
- var pass = true
- if ignoreFile == nil || len(ignoreFile) == 0 {
- return true
- }
- for _, elem := range ignoreFile {
- if strings.Contains(fileName, elem) {
- pass = false
- break
- }
- }
- return pass
- })
- if err != nil {
- return err
- }
- for _, file := range files {
- err := ModifyFile(old, new, file)
- if err != nil {
- return err
- }
- }
- return nil
- }
- type FilterFile func(fileName string) bool
- func GetAllFiles(dirPth string, filter FilterFile) ([]string, error) {
- files := make([]string, 0)
- err := filepath.Walk(dirPth, func(path string, info os.FileInfo, err error) error {
- if info.IsDir() {
- return nil
- }
- if filter(path) {
- files = append(files, path)
- }
- return nil
- })
- if err != nil {
- return nil, err
- }
- return files, nil
- }
- func ModifyFile(old, new string, fileName string) error {
- rfile, err := os.OpenFile(fileName, os.O_RDONLY, os.ModePerm)
- if err != nil {
- return err
- }
- defer rfile.Close()
- reader := bufio.NewReader(rfile)
- fileLine := make([]string, 0)
- count := 0
- for {
- lines, isEOF, err := reader.ReadLine()
- if err != nil {
- if err == io.EOF {
- break
- }
- return err
- }
- if isEOF {
- break
- }
- line := string(lines)
- if strings.Contains(line, old) {
- count++
- fileLine = append(fileLine, strings.ReplaceAll(string(lines), old, new))
- } else {
- fileLine = append(fileLine, line)
- }
- }
- if count == 0 {
- return nil
- }
- wfile, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC, os.ModePerm)
- if err != nil {
- return err
- }
- defer wfile.Close()
- for _, elem := range fileLine {
- _, err := fmt.Fprintln(wfile, elem)
- if err != nil {
- return err
- }
- }
- fmt.Printf("change success : %s\n", fileName)
- return nil
- }
- func ModifyFileV2(old []string, fileName string) error {
- rfile, err := os.OpenFile(fileName, os.O_RDONLY, os.ModePerm)
- if err != nil {
- return err
- }
- defer rfile.Close()
- reader := bufio.NewReader(rfile)
- fileLine := make([]string, 0)
- count := 0
- for {
- lines, isEOF, err := reader.ReadLine()
- if err != nil {
- if strings.Compare(err.Error(), "EOF") == 0 {
- break
- }
- return err
- }
- if isEOF {
- break
- }
- line := string(lines)
- for _, elem := range old {
- if strings.Contains(line, elem) {
- count++
- rep := make([]byte, len(elem))
- for i, _ := range rep {
- rep[i] = '*'
- }
- fileLine = append(fileLine, strings.ReplaceAll(string(lines), elem, string(rep)))
- break
- } else {
- fileLine = append(fileLine, line)
- break
- }
- }
- }
- if count == 0 {
- return nil
- }
- wfile, err := os.OpenFile(fileName, os.O_WRONLY|os.O_TRUNC, os.ModePerm)
- if err != nil {
- return err
- }
- defer wfile.Close()
- for _, elem := range fileLine {
- _, err := fmt.Fprintln(wfile, elem)
- if err != nil {
- return err
- }
- }
- fmt.Printf("replace %s success!!!\n", fileName)
- return nil
- }
|