Skip to content

Commit 5bf0bdf

Browse files
committed
postgresql integration
Signed-off-by: lwsanty <[email protected]>
1 parent a83a0bf commit 5bf0bdf

File tree

6 files changed

+336
-18
lines changed

6 files changed

+336
-18
lines changed

.travis.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ script:
1010
- GO111MODULE=on
1111
- make ci-script
1212

13+
services:
14+
- docker
15+
1316
jobs:
1417
include:
1518
- os: linux

cmd/gitcollector/subcmd/download.go

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,25 @@ func (c *DownloadCmd) Execute(args []string) error {
5757
}
5858

5959
info, err := os.Stat(c.LibPath)
60-
check(err, "wrong path to locate the library")
60+
if err != nil {
61+
log.Errorf(err, "wrong path to locate the library")
62+
return err
63+
}
6164

6265
if !info.IsDir() {
63-
check(
64-
fmt.Errorf("%s isn't a directory", c.LibPath),
65-
"wrong path to locate the library",
66-
)
66+
err := fmt.Errorf("%s isn't a directory", c.LibPath)
67+
log.Errorf(err, "wrong path to locate the library")
68+
return err
6769
}
6870

6971
fs := osfs.New(c.LibPath)
7072

7173
tmpPath, err := ioutil.TempDir(
7274
c.TmpPath, "gitcollector-downloader")
73-
check(err, "unable to create temporal directory")
75+
if err != nil {
76+
log.Errorf(err, "unable to create temporal directory")
77+
return err
78+
}
7479
defer func() {
7580
if err := os.RemoveAll(tmpPath); err != nil {
7681
log.Warningf(
@@ -88,7 +93,10 @@ func (c *DownloadCmd) Execute(args []string) error {
8893
Transactional: true,
8994
TempFS: temp,
9095
})
91-
check(err, "unable to create borges siva library")
96+
if err != nil {
97+
log.Errorf(err, "unable to create borges siva library")
98+
return err
99+
}
92100

93101
authTokens := map[string]string{}
94102
if c.Token != "" {
@@ -124,12 +132,16 @@ func (c *DownloadCmd) Execute(args []string) error {
124132

125133
var mc gitcollector.MetricsCollector
126134
if c.MetricsDBURI != "" {
127-
mc = setupMetrics(
135+
mc, err = setupMetrics(
128136
c.MetricsDBURI,
129137
c.MetricsDBTable,
130138
orgs,
131139
c.MetricsSync,
132140
)
141+
if err != nil {
142+
log.Errorf(err, "failed to setup metrics")
143+
return err
144+
}
133145

134146
log.Debugf("metrics collection activated: sync timeout %d",
135147
c.MetricsSync)
@@ -158,20 +170,16 @@ func (c *DownloadCmd) Execute(args []string) error {
158170
return nil
159171
}
160172

161-
func check(err error, message string) {
162-
if err != nil {
163-
log.Errorf(err, message)
164-
os.Exit(1)
165-
}
166-
}
167-
168173
func setupMetrics(
169174
uri, table string,
170175
orgs []string,
171176
metricSync int64,
172-
) gitcollector.MetricsCollector {
177+
) (gitcollector.MetricsCollector, error) {
173178
db, err := metrics.PrepareDB(uri, table, orgs)
174-
check(err, "metrics database")
179+
if err != nil {
180+
log.Errorf(err, "metrics database")
181+
return nil, err
182+
}
175183

176184
mcs := make(map[string]*metrics.Collector, len(orgs))
177185
for _, org := range orgs {
@@ -184,7 +192,7 @@ func setupMetrics(
184192
mcs[org] = mc
185193
}
186194

187-
return metrics.NewCollectorByOrg(mcs)
195+
return metrics.NewCollectorByOrg(mcs), nil
188196
}
189197

190198
func runGHOrgProviders(

go.mod

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,18 @@ module github.com/src-d/gitcollector
33
go 1.12
44

55
require (
6+
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
7+
github.com/Microsoft/go-winio v0.4.14 // indirect
8+
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect
9+
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
10+
github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6 // indirect
11+
github.com/docker/go-connections v0.4.0 // indirect
12+
github.com/docker/go-units v0.4.0 // indirect
613
github.com/gliderlabs/ssh v0.2.2 // indirect
714
github.com/google/go-github v17.0.0+incompatible
815
github.com/google/go-querystring v1.0.0 // indirect
916
github.com/google/uuid v1.1.1
17+
github.com/gotestyourself/gotestyourself v2.2.0+incompatible // indirect
1018
github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7
1119
github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d // indirect
1220
github.com/kevinburke/ssh_config v0.0.0-20190630040420-2e50c441276c // indirect
@@ -15,6 +23,10 @@ require (
1523
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
1624
github.com/onsi/ginkgo v1.8.0 // indirect
1725
github.com/onsi/gomega v1.5.0 // indirect
26+
github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
27+
github.com/opencontainers/image-spec v1.0.1 // indirect
28+
github.com/opencontainers/runc v0.1.1 // indirect
29+
github.com/ory/dockertest v3.3.5+incompatible
1830
github.com/sirupsen/logrus v1.4.2 // indirect
1931
github.com/src-d/envconfig v1.0.0 // indirect
2032
github.com/src-d/go-borges v0.0.0-20190704083038-44867e8f2a2a
@@ -30,4 +42,5 @@ require (
3042
gopkg.in/src-d/go-errors.v1 v1.0.0
3143
gopkg.in/src-d/go-git.v4 v4.12.0
3244
gopkg.in/src-d/go-log.v1 v1.0.2
45+
gotest.tools v2.2.0+incompatible // indirect
3346
)

go.sum

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,27 @@
11
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
2+
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
3+
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
4+
github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
5+
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
6+
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw=
7+
github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk=
28
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
39
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs=
410
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
511
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
612
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
713
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
14+
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
15+
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
16+
github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6 h1:NmTXa/uVnDyp0TY5MKi197+3HWcnYWfnHGyaFthlnGw=
17+
github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
818
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
919
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1020
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
21+
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
22+
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
23+
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
24+
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
1125
github.com/emirpasic/gods v1.9.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
1226
github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
1327
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
@@ -36,6 +50,8 @@ github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASu
3650
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
3751
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
3852
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
53+
github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI=
54+
github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY=
3955
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
4056
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
4157
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
@@ -75,6 +91,14 @@ github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
7591
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
7692
github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
7793
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
94+
github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
95+
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
96+
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
97+
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
98+
github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y=
99+
github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
100+
github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA=
101+
github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs=
78102
github.com/pelletier/go-buffruneio v0.2.0 h1:U4t4R6YkofJ5xHm3dJzuRpPZ0mr5MMCoAWooScCR7aA=
79103
github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
80104
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -84,6 +108,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
84108
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
85109
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
86110
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
111+
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
87112
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
88113
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
89114
github.com/src-d/envconfig v1.0.0 h1:/AJi6DtjFhZKNx3OB2qMsq7y4yT5//AeSZIe7rk+PX8=
@@ -132,13 +157,15 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
132157
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
133158
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
134159
golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
160+
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
135161
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
136162
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
137163
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
138164
golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
139165
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
140166
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
141167
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
168+
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
142169
golang.org/x/sys v0.0.0-20190609082536-301114b31cce/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
143170
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI=
144171
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -183,3 +210,5 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN
183210
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
184211
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
185212
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
213+
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
214+
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=

integration/helper.go

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package integration
2+
3+
import (
4+
"database/sql"
5+
"io/ioutil"
6+
"os"
7+
"path/filepath"
8+
9+
"github.com/src-d/gitcollector/cmd/gitcollector/subcmd"
10+
11+
"github.com/ory/dockertest"
12+
)
13+
14+
const (
15+
dockerImage = "postgres"
16+
dockerVersion = "9.6"
17+
)
18+
19+
type helper struct {
20+
address string
21+
cmd subcmd.DownloadCmd
22+
cli *sql.DB
23+
closers []func()
24+
}
25+
26+
func NewHelper(orgs string) (*helper, error) {
27+
lib, err := ioutil.TempDir("", "gcol-lib")
28+
if err != nil {
29+
removePaths(lib)
30+
return nil, err
31+
}
32+
33+
tmp, err := ioutil.TempDir("", "gcol-tmp")
34+
if err != nil {
35+
removePaths(tmp, lib)
36+
return nil, err
37+
}
38+
39+
addr, contClose, err := preparePostgres()
40+
if err != nil {
41+
return nil, err
42+
}
43+
44+
cli, err := sql.Open("postgres", addr)
45+
if err != nil {
46+
contClose()
47+
return nil, err
48+
}
49+
50+
return &helper{
51+
address: addr,
52+
cmd: subcmd.DownloadCmd{
53+
Orgs: orgs,
54+
LibPath: lib,
55+
TmpPath: tmp,
56+
// Tests may fail due to request rate limit until https://github.com/src-d/gitcollector/issues/74 is fixed
57+
Token: os.Getenv("GITHUB_TOKEN"),
58+
},
59+
cli: cli,
60+
closers: []func(){
61+
func() {
62+
cli.Close()
63+
contClose()
64+
},
65+
contClose,
66+
},
67+
}, nil
68+
}
69+
70+
func (h *helper) Exec() error { return h.cmd.Execute(nil) }
71+
72+
func (h *helper) Cleanup() {
73+
removeDirsContents(h.cmd.TmpPath, h.cmd.LibPath)
74+
}
75+
76+
func (h *helper) Close() {
77+
for _, c := range h.closers {
78+
c()
79+
}
80+
removePaths(h.cmd.TmpPath, h.cmd.LibPath)
81+
}
82+
83+
func preparePostgres() (string, func(), error) {
84+
pool, err := dockertest.NewPool("")
85+
if err != nil {
86+
return "", func() {}, err
87+
}
88+
89+
cont, err := pool.Run(dockerImage, dockerVersion, []string{
90+
"POSTGRES_PASSWORD=postgres",
91+
})
92+
if err != nil {
93+
return "", func() {}, err
94+
}
95+
96+
const port = "5432/tcp"
97+
addr := `postgres://postgres:postgres@` + cont.GetHostPort(port) + "?sslmode=disable"
98+
if err := pool.Retry(func() error {
99+
cli, err := sql.Open("postgres", addr)
100+
if err != nil {
101+
return err
102+
}
103+
defer cli.Close()
104+
return cli.Ping()
105+
}); err != nil {
106+
cont.Close()
107+
return "", func() {}, err
108+
}
109+
110+
return addr, func() {
111+
cont.Close()
112+
}, nil
113+
}
114+
115+
func removePaths(paths ...string) {
116+
for _, p := range paths {
117+
os.RemoveAll(p)
118+
}
119+
}
120+
121+
func removeDirsContents(dirs ...string) {
122+
for _, d := range dirs {
123+
removeContents(d)
124+
}
125+
}
126+
127+
func removeContents(dir string) error {
128+
d, err := os.Open(dir)
129+
if err != nil {
130+
return err
131+
}
132+
defer d.Close()
133+
names, err := d.Readdirnames(-1)
134+
if err != nil {
135+
return err
136+
}
137+
for _, name := range names {
138+
err = os.RemoveAll(filepath.Join(dir, name))
139+
if err != nil {
140+
return err
141+
}
142+
}
143+
return nil
144+
}

0 commit comments

Comments
 (0)