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  }