@@ -27,6 +27,7 @@ import (
2727 "os"
2828 "path"
2929 "strings"
30+ "time"
3031
3132 "github.com/J-Siu/go-helper/v2/basestruct"
3233 "github.com/J-Siu/go-helper/v2/errs"
@@ -39,8 +40,8 @@ import (
3940type FileProcMode int8
4041
4142const (
42- APPEND FileProcMode = iota // Processing mode for TypeDotfile.Mode
43- COPY // Processing mode for TypeDotfile.Mode
43+ APPEND FileProcMode = iota
44+ COPY
4445 SKIP
4546)
4647
@@ -106,72 +107,58 @@ func (t *TypeDotfile) Run() {
106107//
107108// Not using TypeDotfile.Err
108109func (t * TypeDotfile ) processFile (src , dest string ) (err error ) {
109- prefix := t .MyType + ".processFile"
110+ // prefix := t.MyType + ".processFile"
110111
111- fileProcMode := t .Mode
112- filePermStr := ".........."
112+ var (
113+ data []byte
114+ filePermStr = ".........."
115+ fileProcMode = t .Mode
116+ srcInfo os.FileInfo
117+ srcModTime time.Time
118+ srcPermission os.FileMode
119+ )
113120
114- // Destination FileMode
115- destFlag := os .O_CREATE | os .O_WRONLY
116- if fileProcMode == APPEND {
117- destFlag |= os .O_APPEND
118- }
119- if fileProcMode == COPY {
120- destFlag |= os .O_TRUNC
121- same := file .FileSame (src , dest )
122- if same {
123- fileProcMode = SKIP
124- }
121+ if fileProcMode == COPY && file .FileSame (src , dest ) {
122+ fileProcMode = SKIP
125123 }
126124
127125 if fileProcMode != SKIP {
128- srcInfo , err := os .Stat (src )
129- if err != nil {
130- return err
126+ srcInfo , err = os .Stat (src )
127+ if err == nil {
128+ srcPermission = srcInfo .Mode ()
129+ srcModTime = srcInfo .ModTime ()
131130 }
132- srcPermission := srcInfo .Mode ()
133- srcModTime := srcInfo .ModTime ()
134131
135132 // Read source file
136- data , err := os .ReadFile (src )
137- if err != nil {
138- return err
139- }
140-
141- // Open destination file
142- f , err := os .OpenFile (dest , destFlag , srcPermission )
143- if err != nil {
144- return err
133+ if err == nil {
134+ data , err = os .ReadFile (src )
145135 }
146136
147137 // Append: add newline to destination file
148- if fileProcMode == APPEND {
149- _ , err = f .Write ([]byte ("\n " ))
150- if err != nil {
151- return err
138+ if err == nil {
139+ if fileProcMode == APPEND {
140+ b := []byte ("\n " )
141+ err = file .AppendByte (dest , & b )
142+ if err == nil {
143+ err = file .AppendByte (dest , & data )
144+ }
145+ } else {
146+ err = file .WriteByte (dest , & data , srcPermission )
152147 }
153148 }
154149
155- // Append source content to destination file
156- _ , err = f .Write (data )
157- if err != nil {
158- return err
159- }
160-
161- f .Close ()
162-
163150 // Set dest permission
164- if fileProcMode == COPY {
151+ if err == nil && fileProcMode == COPY {
165152 os .Chtimes (dest , srcModTime , srcModTime )
166153 filePermStr = srcPermission .String ()
167154 }
168155 }
169156
170- str := fmt . Sprintf ( "%-6s %s %s -> %s" , fileProcMode . String (), filePermStr , src , dest )
171- if ezlog .GetLogLevel () >= ezlog .DEBUG {
172- ezlog . Debug (). N ( prefix ). M ( str ). Out ( )
173- } else if t . Verbose {
174- ezlog . Log (). M ( str ). Out ()
157+ if err == nil {
158+ if ezlog .GetLogLevel () >= ezlog .DEBUG || t . Verbose {
159+ str := fmt . Sprintf ( "%-6s %s %s -> %s" , fileProcMode . String (), filePermStr , src , dest )
160+ ezlog . Log (). M ( str ). Out ()
161+ }
175162 }
176163
177164 return err
0 commit comments