github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/fileutil/writelines.go (about) 1 package fileutil 2 3 import ( 4 "os" 5 "path/filepath" 6 "strings" 7 ) 8 9 func WriteFileLines(fn string, lines []string) error { 10 os.MkdirAll(filepath.Dir(fn), 0755) 11 12 f, err := os.Create(fn) 13 defer f.Close() 14 if err != nil { 15 return err 16 } 17 18 for _, l := range lines { 19 f.WriteString(l) 20 f.WriteString("\n") 21 } 22 23 return nil 24 } 25 26 func WriteText(fn string, t string) error { 27 f, err := os.Create(fn) 28 defer f.Close() 29 if err != nil { 30 return err 31 } 32 f.WriteString(t) 33 return nil 34 } 35 36 func WriteTemplate(input string, output string, marker string, text string) error { 37 // read template file 38 tmpl, err := os.ReadFile(input) // just pass the file name 39 if err != nil { 40 return err 41 } 42 43 f, err := os.Create(output) 44 if err != nil { 45 return err 46 } 47 defer f.Close() 48 _, err = f.WriteString(strings.Replace(string(tmpl), marker, text, 1)) 49 return err 50 } 51 52 type ExtWriter struct { 53 os.File 54 } 55 56 func (e ExtWriter) WriteFolded(name string, val string) { 57 // prepare the description field 58 if val := strings.TrimSpace(val); val != "" { 59 e.WriteString(name) 60 e.WriteString(":") 61 for _, l := range strings.Split(val, "\n") { 62 e.WriteString(" ") 63 if l == "" { 64 e.WriteString(".") 65 } else { 66 e.WriteString(l) 67 } 68 e.WriteString("\n") 69 } 70 } 71 } 72 73 func (e ExtWriter) WriteField(name string, val string) { 74 if val != "" { 75 e.WriteString(name) 76 e.WriteString(": ") 77 e.WriteString(val) 78 e.WriteString("\n") 79 } 80 } 81 82 func (e ExtWriter) WriteVar(name string, val string) { 83 if val != "" { 84 e.WriteString(name) 85 e.WriteString("=") 86 e.WriteString(val) 87 e.WriteString("\n") 88 } 89 } 90 91 func CreateWriter(fn string) (ExtWriter, error) { 92 if fn == "" { 93 panic("CreateWriter: empty file name") 94 } 95 f, err := os.Create(fn) 96 if err != nil { 97 return ExtWriter{}, err 98 } 99 return ExtWriter{*f}, err 100 }