@@ -65,6 +65,20 @@ func OpenFile(path string, flag int, perm os.FileMode) (*os.File, error) {
6565 return file , err
6666}
6767
68+ func OpenNewFile (path string ) (* os.File , error ) {
69+ cleanPath , err := EscapeTilde (path )
70+ if err != nil {
71+ return nil , err
72+ }
73+
74+ file , err := os .Create (cleanPath )
75+ if err != nil {
76+ return nil , errors .Wrap (err , errors .Message (ErrorCreateFile (path )))
77+ }
78+
79+ return file , nil
80+ }
81+
6882func ReadFile (path string ) (string , error ) {
6983 fileBytes , err := ReadFileBytes (path )
7084 if err != nil {
@@ -96,18 +110,19 @@ func ReadFileBytesErrPath(path string, errMsgPath string) ([]byte, error) {
96110 return fileBytes , nil
97111}
98112
99- func CreateFile (path string ) ( * os. File , error ) {
113+ func CreateFile (path string ) error {
100114 cleanPath , err := EscapeTilde (path )
101115 if err != nil {
102- return nil , err
116+ return err
103117 }
104118
105119 file , err := os .Create (cleanPath )
106120 if err != nil {
107- return nil , errors .Wrap (err , errors .Message (ErrorCreateFile (path )))
121+ return errors .Wrap (err , errors .Message (ErrorCreateFile (path )))
108122 }
123+ defer file .Close ()
109124
110- return file , nil
125+ return nil
111126}
112127
113128func WriteFile (data []byte , path string ) error {
@@ -123,19 +138,6 @@ func WriteFile(data []byte, path string) error {
123138 return nil
124139}
125140
126- func MkdirAll (path string ) error {
127- cleanPath , err := EscapeTilde (path )
128- if err != nil {
129- return err
130- }
131-
132- if err := os .MkdirAll (cleanPath , os .ModePerm ); err != nil {
133- return errors .Wrap (err , errors .Message (ErrorCreateDir (path )))
134- }
135-
136- return nil
137- }
138-
139141// Returns original path if there was an error
140142func EscapeTilde (path string ) (string , error ) {
141143 if ! (path == "~" || strings .HasPrefix (path , "~/" )) {
@@ -256,23 +258,61 @@ func CheckFileErrPath(path string, errMsgPath string) error {
256258 return nil
257259}
258260
259- func CreateDirIfMissing (path string ) ( bool , error ) {
261+ func CreateDir (path string ) error {
260262 cleanPath , err := EscapeTilde (path )
261263 if err != nil {
262- return false , err
264+ return err
265+ }
266+
267+ if err := os .MkdirAll (cleanPath , os .ModePerm ); err != nil {
268+ return errors .Wrap (err , errors .Message (ErrorCreateDir (path )))
263269 }
264270
265- if err := CheckDir (path ); err == nil {
271+ return nil
272+ }
273+
274+ func CreateDirIfMissing (path string ) (bool , error ) {
275+ if IsDir (path ) {
266276 return false , nil
267277 }
268278
269- if err := CheckFile (path ); err == nil {
279+ if IsFile (path ) {
270280 return false , ErrorFileAlreadyExists (path )
271281 }
272282
273- err = os .MkdirAll (cleanPath , os .ModePerm )
283+ err := CreateDir (path )
284+ if err != nil {
285+ return false , err
286+ }
287+
288+ return true , nil
289+ }
290+
291+ func DeleteDir (path string ) error {
292+ cleanPath , err := EscapeTilde (path )
274293 if err != nil {
275- return false , errors .Wrap (err , path )
294+ return err
295+ }
296+
297+ if err := os .RemoveAll (cleanPath ); err != nil {
298+ return errors .Wrap (err , errors .Message (ErrorDeleteDir (path )))
299+ }
300+
301+ return nil
302+ }
303+
304+ func DeleteDirIfPresent (path string ) (bool , error ) {
305+ if IsFile (path ) {
306+ return false , ErrorFileAlreadyExists (path )
307+ }
308+
309+ if ! IsDir (path ) {
310+ return false , nil
311+ }
312+
313+ err := DeleteDir (path )
314+ if err != nil {
315+ return false , err
276316 }
277317
278318 return true , nil
0 commit comments