Skip to content

Commit bd3f073

Browse files
authored
add src repos delete command (sourcegraph#25)
1 parent da78eac commit bd3f073

39 files changed

+4000
-10
lines changed

Gopkg.lock

+48-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

+8
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,11 @@
4040
[[constraint]]
4141
branch = "master"
4242
name = "github.com/dustin/go-humanize"
43+
44+
[[constraint]]
45+
name = "github.com/hashicorp/go-multierror"
46+
version = "1.0.0"
47+
48+
[[constraint]]
49+
name = "github.com/pkg/errors"
50+
version = "0.8.0"

cmd/src/repos.go

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ The commands are:
1919
list lists repositories
2020
enable enables repositories
2121
disable disables repositories
22+
delete deletes repositories
2223
2324
Use "src repos [command] -h" for more information about a command.
2425
`

cmd/src/repos_delete.go

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"fmt"
6+
7+
multierror "github.com/hashicorp/go-multierror"
8+
"github.com/pkg/errors"
9+
)
10+
11+
func init() {
12+
flagSet := flag.NewFlagSet("delete", flag.ExitOnError)
13+
apiFlags := newAPIFlags(flagSet)
14+
15+
printUsage := func() {
16+
fmt.Fprintf(flag.CommandLine.Output(), "Usage of 'src repos %s'\n", flagSet.Name())
17+
18+
flagSet.PrintDefaults()
19+
20+
examples := `
21+
Examples:
22+
23+
Delete one or more repositories:
24+
25+
$ src repos delete github.com/my/repo github.com/my/repo2
26+
`
27+
fmt.Fprint(flag.CommandLine.Output(), examples)
28+
}
29+
30+
deleteRepository := func(repoName string) error {
31+
repoID, err := fetchRepositoryID(repoName)
32+
if err != nil {
33+
return err
34+
}
35+
36+
query := `mutation DeleteRepository($repoID: ID!){
37+
deleteRepository(repository: $repoID) {
38+
alwaysNil
39+
}
40+
}`
41+
var result struct{}
42+
return (&apiRequest{
43+
query: query,
44+
vars: map[string]interface{}{
45+
"repoID": repoID,
46+
},
47+
result: &result,
48+
done: func() error {
49+
fmt.Fprintf(flag.CommandLine.Output(), "Repository %q deleted\n", repoName)
50+
return nil
51+
},
52+
flags: apiFlags,
53+
}).do()
54+
}
55+
56+
deleteRepositories := func(args []string) error {
57+
flagSet.Parse(args)
58+
var errs *multierror.Error
59+
for _, repoName := range flagSet.Args() {
60+
err := deleteRepository(repoName)
61+
if err != nil {
62+
err = errors.Wrapf(err, "Failed to delete repository %q", repoName)
63+
errs = multierror.Append(errs, err)
64+
}
65+
}
66+
return errs.ErrorOrNil()
67+
}
68+
69+
// Register the command.
70+
reposCommands = append(reposCommands, &command{
71+
flagSet: flagSet,
72+
handler: deleteRepositories,
73+
usageFunc: printUsage,
74+
})
75+
}

cmd/src/repos_enable_disable.go

+7-9
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package main
22

33
import (
4-
"errors"
54
"flag"
65
"fmt"
7-
"log"
6+
7+
multierror "github.com/hashicorp/go-multierror"
8+
"github.com/pkg/errors"
89
)
910

1011
func init() {
@@ -67,17 +68,14 @@ func initReposEnableDisable(cmdName string, enable bool, usage string) {
6768
handler := func(args []string) error {
6869
flagSet.Parse(args)
6970

70-
errs := false
71+
var errs *multierror.Error
7172
for _, repoName := range flagSet.Args() {
7273
if err := setRepositoryEnabled(repoName, enable); err != nil {
73-
errs = true
74-
log.Println(err)
74+
err = errors.Wrapf(err, "Failed to %s repository %q", cmdName, repoName)
75+
errs = multierror.Append(errs, err)
7576
}
7677
}
77-
if errs {
78-
return errors.New("(errors occurred)")
79-
}
80-
return nil
78+
return errs.ErrorOrNil()
8179
}
8280

8381
// Register the command.

0 commit comments

Comments
 (0)