@@ -12,43 +12,74 @@ import (
12
12
var dir string
13
13
var extensions string
14
14
var output string
15
+ var verbose bool
15
16
16
17
func init () {
17
18
flag .StringVar (& dir , "directory" , "./path/to/files/" , "directory of files to merge" )
18
19
flag .StringVar (& extensions , "extension" , ".txt" , "the file extension of files to merge. Use comma separation for multiple types." )
19
20
flag .StringVar (& output , "output" , "./output.txt" , "the output file name" )
21
+ flag .BoolVar (& verbose , "verbose" , false , "verbose logging" )
20
22
}
21
23
22
24
func main () {
23
- tmp := make ([]byte , 0 )
24
- directory := os .DirFS (dir )
25
+
26
+ if verbose {
27
+ fmt .Printf ("called with directory=%s, extension=%s, output=%s\n " , dir , extensions , output )
28
+ }
25
29
26
30
acceptedExtensions := strings .Split (extensions , "," )
27
31
28
- walkErr := fs .WalkDir (directory , "." , func (path string , d fs.DirEntry , err error ) error {
29
- if d .IsDir () {
32
+ if verbose {
33
+ fmt .Printf ("accepted extensions: include %s\n " , strings .Join (acceptedExtensions , ", " ))
34
+ }
35
+
36
+ Merge (dir , acceptedExtensions , output , verbose )
37
+ }
38
+
39
+ func Merge (d string , fileExtensions []string , outputFilepath string , verboseLogging bool ) {
40
+ directory := os .DirFS (d )
41
+
42
+ tmp := make ([]byte , 0 )
43
+
44
+ walkErr := fs .WalkDir (directory , "." , func (path string , entry fs.DirEntry , err error ) error {
45
+ if entry .IsDir () {
46
+ if verboseLogging {
47
+ fmt .Printf ("skipping directory %s\n " , d + path )
48
+ }
30
49
return nil
31
50
}
32
51
33
52
if err != nil {
53
+ if verboseLogging {
54
+ fmt .Printf ("error checking directory %s\n " , d + path )
55
+ }
34
56
return err
35
57
}
36
58
37
- if len (acceptedExtensions ) != 0 {
59
+ if len (fileExtensions ) != 0 {
38
60
found := false
39
- for _ , extension := range acceptedExtensions {
61
+ for _ , extension := range fileExtensions {
40
62
if strings .HasSuffix (path , extension ) {
41
63
found = true
64
+ fmt .Printf ("found matching file extension %s for %s\n " , extension , d + path )
42
65
break
43
66
}
44
67
}
45
68
if ! found {
69
+ if verboseLogging {
70
+ fmt .Printf ("didn't find matching file extension for %s\n " , d + path )
71
+ }
46
72
return nil
47
73
}
74
+ } else {
75
+ if verboseLogging {
76
+ fmt .Println ("no extensions to check" )
77
+ }
48
78
}
49
79
50
- fileBytes , readErr := os .ReadFile (dir + path )
80
+ fileBytes , readErr := os .ReadFile (d + path )
51
81
if readErr != nil {
82
+ fmt .Printf ("error reading file %s\n " , d + path )
52
83
return readErr
53
84
}
54
85
@@ -57,29 +88,32 @@ func main() {
57
88
})
58
89
59
90
if walkErr != nil {
60
- log . Print ( walkErr )
91
+ fmt . Printf ( "error walking file system %s \n " , walkErr )
61
92
}
62
93
63
- if _ , err := os .Stat (output ); err == nil {
94
+ if _ , err := os .Stat (outputFilepath ); err == nil {
64
95
65
- inputBytes , readErr := os .ReadFile (output )
96
+ inputBytes , readErr := os .ReadFile (outputFilepath )
66
97
if readErr != nil {
98
+ fmt .Printf ("didn't find existing file %s\n " , outputFilepath )
67
99
log .Print (err )
68
100
os .Exit (1 )
69
101
}
70
102
71
- if err := os .WriteFile (output + ".old" , inputBytes , 0777 ); err != nil {
103
+ if err := os .WriteFile (outputFilepath + ".old" , inputBytes , 0777 ); err != nil {
72
104
log .Print (err )
73
105
os .Exit (1 )
74
106
}
107
+ } else {
108
+ fmt .Printf ("didn't find existing file %s\n " , outputFilepath )
75
109
}
76
110
77
- err := os .WriteFile (output , tmp , 0777 )
111
+ err := os .WriteFile (outputFilepath , tmp , 0777 )
78
112
79
113
if err != nil {
80
114
log .Print (err )
81
115
os .Exit (1 )
82
116
}
83
117
84
- fmt .Printf ("created %s\n " , output )
118
+ fmt .Printf ("created %s\n " , outputFilepath )
85
119
}
0 commit comments