12 func lineInFile(name string, lookFor string) bool {
13 f, err := os.Open(name)
18 r := bufio.NewReader(f)
21 line, isPrefix, err := r.ReadLine()
29 prefix = append(prefix, line...)
32 line = append(prefix, line...)
33 if string(line) == lookFor {
40 func createFile(name string, content string) error {
41 // make sure file directory exists
42 if err := os.MkdirAll(filepath.Dir(name), 0775); err != nil {
47 f, err := os.Create(name)
54 _, err = f.WriteString(fmt.Sprintf("%s\n", content))
58 func appendToFile(name string, content string) error {
59 f, err := os.OpenFile(name, os.O_RDWR|os.O_APPEND, 0)
64 _, err = f.WriteString(fmt.Sprintf("\n%s\n", content))
68 func removeFromFile(name string, content string) error {
69 backup := name + ".bck"
70 err := copyFile(name, backup)
74 temp, err := removeContentToTempFile(name, content)
79 err = copyFile(temp, name)
84 return os.Remove(backup)
87 func removeContentToTempFile(name, content string) (string, error) {
88 rf, err := os.Open(name)
93 wf, err := ioutil.TempFile("/tmp", "complete-")
99 r := bufio.NewReader(rf)
102 line, isPrefix, err := r.ReadLine()
110 prefix = append(prefix, line...)
113 line = append(prefix, line...)
118 _, err = wf.WriteString(str + "\n")
124 return wf.Name(), nil
127 func copyFile(src string, dst string) error {
128 in, err := os.Open(src)
133 out, err := os.Create(dst)
138 _, err = io.Copy(out, in)