Skip to content

Commit 7ee6983

Browse files
committed
Fix cg-gen-events download not working on Windows
1 parent 39e9e07 commit 7ee6983

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

external/archive.go

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,12 @@ package external
22

33
import (
44
"archive/tar"
5+
"archive/zip"
6+
"bytes"
57
"compress/gzip"
8+
"errors"
69
"io"
10+
"io/ioutil"
711
"os"
812
)
913

@@ -25,18 +29,48 @@ func UntargzFile(source io.Reader, fileName, outputFileName string) error {
2529
}
2630

2731
info := header.FileInfo()
28-
if info.Name() == fileName {
32+
if !info.IsDir() && info.Name() == fileName {
2933
file, err := os.OpenFile(outputFileName, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, info.Mode())
3034
if err != nil {
3135
return err
3236
}
3337
defer file.Close()
3438
_, err = io.Copy(file, tarReader)
39+
return err
40+
}
41+
}
42+
43+
return errors.New("file not found")
44+
}
45+
46+
func UnzipFile(source io.Reader, fileName, outputFileName string) error {
47+
data, err := ioutil.ReadAll(source)
48+
if err != nil {
49+
return err
50+
}
51+
52+
reader, err := zip.NewReader(bytes.NewReader(data), int64(len(data)))
53+
if err != nil {
54+
return err
55+
}
56+
57+
for _, f := range reader.File {
58+
if !f.FileInfo().IsDir() && f.FileInfo().Name() == fileName {
59+
out, err := os.OpenFile(outputFileName, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, f.FileInfo().Mode())
60+
if err != nil {
61+
return err
62+
}
63+
defer out.Close()
64+
in, err := f.Open()
3565
if err != nil {
3666
return err
3767
}
38-
return nil
68+
defer in.Close()
69+
70+
_, err = io.Copy(out, in)
71+
return err
3972
}
4073
}
41-
return nil
74+
75+
return errors.New("file not found")
4276
}

external/cg_gen_events.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ func InstallCGGenEvents(cgeVersion string) error {
7272
return err
7373
}
7474

75+
if runtime.GOOS == "windows" {
76+
return UnzipFile(res.Body, "cg-gen-events.exe", filepath.Join(cgGenEventsPath, exeName))
77+
}
7578
return UntargzFile(res.Body, "cg-gen-events", filepath.Join(cgGenEventsPath, exeName))
7679
}
7780

0 commit comments

Comments
 (0)