Skip to content

Commit 98552c0

Browse files
committed
walk complete
1 parent 610ef16 commit 98552c0

7 files changed

Lines changed: 410 additions & 4 deletions

File tree

util/go.mod

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/CycloneDX/cyclonedx-go v0.7.0
77
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394
88
github.com/glebarez/go-sqlite v1.21.2
9+
github.com/mholt/archiver v3.1.1+incompatible
910
github.com/pkg/errors v0.9.1
1011
github.com/titanous/json5 v1.0.0
1112
github.com/veraison/swid v0.0.1-beta.6
@@ -16,18 +17,25 @@ require (
1617

1718
require (
1819
github.com/davecgh/go-spew v1.1.1 // indirect
20+
github.com/dsnet/compress v0.0.1 // indirect
1921
github.com/dustin/go-humanize v1.0.1 // indirect
22+
github.com/frankban/quicktest v1.14.6 // indirect
2023
github.com/fxamacker/cbor/v2 v2.3.0 // indirect
2124
github.com/go-sql-driver/mysql v1.7.0 // indirect
25+
github.com/golang/snappy v0.0.4 // indirect
2226
github.com/google/uuid v1.3.0 // indirect
2327
github.com/jinzhu/inflection v1.0.0 // indirect
2428
github.com/jinzhu/now v1.1.5 // indirect
2529
github.com/mattn/go-isatty v0.0.17 // indirect
2630
github.com/mattn/go-sqlite3 v1.14.17 // indirect
31+
github.com/nwaples/rardecode v1.1.3 // indirect
32+
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
2733
github.com/pmezard/go-difflib v1.0.0 // indirect
2834
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
2935
github.com/stretchr/testify v1.8.0 // indirect
36+
github.com/ulikunitz/xz v0.5.11 // indirect
3037
github.com/x448/float16 v0.8.4 // indirect
38+
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
3139
golang.org/x/sys v0.8.0 // indirect
3240
gopkg.in/yaml.v3 v3.0.1 // indirect
3341
modernc.org/libc v1.22.5 // indirect

util/go.sum

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,52 @@ github.com/CycloneDX/cyclonedx-go v0.7.0/go.mod h1:W5Z9w8pTTL+t+yG3PCiFRGlr8PUlE
33
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ=
44
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg=
55
github.com/bradleyjkemp/cupaloy/v2 v2.8.0 h1:any4BmKE+jGIaMpnU8YgH/I2LPiLBufr6oMMlVBbn9M=
6+
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
67
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
78
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
89
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10+
github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q=
11+
github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo=
12+
github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY=
913
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
1014
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
15+
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
16+
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
1117
github.com/fxamacker/cbor/v2 v2.3.0 h1:aM45YGMctNakddNNAezPxDUpv38j44Abh+hifNuqXik=
1218
github.com/fxamacker/cbor/v2 v2.3.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo=
1319
github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo=
1420
github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k=
1521
github.com/go-sql-driver/mysql v1.7.0 h1:ueSltNNllEqE3qcWBTD0iQd3IpL/6U+mJxLkazJ7YPc=
1622
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
23+
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
24+
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
25+
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
26+
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
1727
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
1828
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
1929
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
2030
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
2131
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
2232
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
2333
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
34+
github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
35+
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
36+
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
37+
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
38+
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
39+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
2440
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
2541
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
2642
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
2743
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
2844
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
45+
github.com/mholt/archiver v3.1.1+incompatible h1:1dCVxuqs0dJseYEhi5pl7MYPH9zDa1wBi7mF09cbNkU=
46+
github.com/mholt/archiver v3.1.1+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU=
47+
github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc=
48+
github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0=
49+
github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
50+
github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
51+
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
2952
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
3053
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
3154
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -34,6 +57,8 @@ github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qq
3457
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
3558
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
3659
github.com/robertkrimen/otto v0.2.1 h1:FVP0PJ0AHIjC+N4pKCG9yCDz6LHNPCwi/GKID5pGGF0=
60+
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
61+
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
3762
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3863
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
3964
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
@@ -42,10 +67,15 @@ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PK
4267
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
4368
github.com/titanous/json5 v1.0.0 h1:hJf8Su1d9NuI/ffpxgxQfxh/UiBFZX7bMPid0rIL/7s=
4469
github.com/titanous/json5 v1.0.0/go.mod h1:7JH1M8/LHKc6cyP5o5g3CSaRj+mBrIimTxzpvmckH8c=
70+
github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8=
71+
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
72+
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
4573
github.com/veraison/swid v0.0.1-beta.6 h1:ysDyCOPwGyjiBnhAM+/kgTEcc/PWieIbUQJOjnSTK48=
4674
github.com/veraison/swid v0.0.1-beta.6/go.mod h1:d5jt76uMNbTfQ+f2qU4Lt8RvWOTsv6PFgstIM1QdMH0=
4775
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
4876
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
77+
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo=
78+
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos=
4979
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
5080
golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
5181
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

util/walk/magic.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package walk
2+
3+
import (
4+
"bytes"
5+
"io"
6+
"os"
7+
"strings"
8+
"util/logs"
9+
)
10+
11+
type Magic []byte
12+
13+
var (
14+
M_ZIP = Magic{0x50, 0x4B, 0x03, 0x04}
15+
M_RAR = Magic{0x52, 0x61, 0x72, 0x21, 0x1A, 0x07}
16+
M_GZ = Magic{0x1F, 0x8B}
17+
M_BZ2 = Magic{0x42, 0x5A, 0x68}
18+
M_LZ4 = Magic{0x04, 0x22, 0x4D, 0x18}
19+
M_XZ = Magic{0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00}
20+
M_AR = Magic{0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A}
21+
M_7Z = Magic{0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C}
22+
)
23+
24+
// checkFileExt 检查文件后缀
25+
func checkFileExt(abspath string, exts ...string) bool {
26+
for _, ext := range exts {
27+
if ext == "" {
28+
continue
29+
}
30+
if strings.HasSuffix(abspath, ext) {
31+
return true
32+
}
33+
}
34+
return false
35+
}
36+
37+
// checkFileHead 检查文件头
38+
func checkFileHead(abspath string, ms ...Magic) bool {
39+
reader, err := os.Open(abspath)
40+
if err != nil {
41+
logs.Warn(err)
42+
}
43+
defer reader.Close()
44+
for _, m := range ms {
45+
if len(m) == 0 {
46+
continue
47+
}
48+
h := make([]byte, len(m))
49+
reader.Seek(0, io.SeekStart)
50+
reader.Read(h)
51+
reader.Seek(0, io.SeekStart)
52+
if bytes.Equal(m, h) {
53+
return true
54+
}
55+
}
56+
return false
57+
}

util/walk/rar.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package walk
2+
3+
import (
4+
"io"
5+
"os"
6+
"path/filepath"
7+
"util/logs"
8+
9+
"github.com/nwaples/rardecode"
10+
)
11+
12+
func xrar(input, output string) bool {
13+
14+
if !checkFileHead(input, M_RAR) {
15+
return false
16+
}
17+
18+
fr, err := rardecode.OpenReader(input, "")
19+
if err != nil {
20+
logs.Warn(err)
21+
return false
22+
}
23+
defer fr.Close()
24+
25+
for {
26+
27+
fh, err := fr.Next()
28+
if err == io.EOF {
29+
break
30+
}
31+
if err != nil {
32+
logs.Warn(err)
33+
continue
34+
}
35+
36+
fp := filepath.Join(output, fh.Name)
37+
if fh.IsDir {
38+
os.MkdirAll(fp, 0755)
39+
continue
40+
}
41+
42+
fw, err := os.Create(fp)
43+
if err != nil {
44+
logs.Warn(err)
45+
continue
46+
}
47+
48+
io.Copy(fw, fr)
49+
fw.Close()
50+
}
51+
return true
52+
}

util/walk/tar.go

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
package walk
2+
3+
import (
4+
"archive/tar"
5+
"compress/bzip2"
6+
"compress/gzip"
7+
"io"
8+
"os"
9+
"path/filepath"
10+
"strings"
11+
"util/logs"
12+
)
13+
14+
func xtar(input, output string) bool {
15+
16+
if !checkFileExt(input, ".tar") {
17+
return false
18+
}
19+
20+
f, err := os.Open(input)
21+
if err != nil {
22+
logs.Warn(err)
23+
return false
24+
}
25+
defer f.Close()
26+
27+
fr := tar.NewReader(f)
28+
for {
29+
30+
fh, err := fr.Next()
31+
if err == io.EOF {
32+
break
33+
}
34+
if err != nil {
35+
logs.Warn(err)
36+
continue
37+
}
38+
39+
fp := filepath.Join(output, fh.Name)
40+
if fh.Typeflag == tar.TypeDir {
41+
os.MkdirAll(fp, 0755)
42+
continue
43+
}
44+
45+
fw, err := os.Create(fp)
46+
if err != nil {
47+
logs.Warn(err)
48+
continue
49+
}
50+
51+
io.Copy(fw, fr)
52+
fw.Close()
53+
}
54+
return true
55+
}
56+
57+
func xgz(input, output string) bool {
58+
59+
if !checkFileHead(input, M_GZ) {
60+
return false
61+
}
62+
63+
f, err := os.Open(input)
64+
if err != nil {
65+
logs.Warn(err)
66+
return false
67+
}
68+
defer f.Close()
69+
70+
fr, err := gzip.NewReader(f)
71+
if err != nil {
72+
logs.Warn(err)
73+
return false
74+
}
75+
defer fr.Close()
76+
77+
fp := filepath.Join(output, strings.TrimSuffix(filepath.Base(input), filepath.Ext(input)))
78+
fw, err := os.Create(fp)
79+
if err != nil {
80+
logs.Warn(err)
81+
return false
82+
}
83+
84+
_, err = io.Copy(fw, fr)
85+
fw.Close()
86+
87+
return err == nil
88+
}
89+
90+
func xbz2(input, output string) bool {
91+
92+
if !checkFileHead(input, M_BZ2) {
93+
return false
94+
}
95+
96+
f, err := os.Open(input)
97+
if err != nil {
98+
logs.Warn(err)
99+
return false
100+
}
101+
defer f.Close()
102+
103+
fr := bzip2.NewReader(f)
104+
105+
fp := filepath.Join(output, strings.TrimSuffix(filepath.Base(input), filepath.Ext(input)))
106+
fw, err := os.Create(fp)
107+
if err != nil {
108+
logs.Warn(err)
109+
return false
110+
}
111+
112+
_, err = io.Copy(fw, fr)
113+
fw.Close()
114+
115+
return err == nil
116+
}

0 commit comments

Comments
 (0)