Skip to content

Commit bec0c2f

Browse files
authored
Merge pull request #28 from github/vdye/initial-trace2
Logging Part 1: initial `trace2` events (`start`, `cmd_name`, `error`, `exit`, `atexit`)
2 parents 725df38 + 3504fd2 commit bec0c2f

File tree

23 files changed

+917
-356
lines changed

23 files changed

+917
-356
lines changed

cmd/git-bundle-server/delete.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,57 @@
11
package main
22

33
import (
4+
"context"
45
"os"
56

67
"github.com/github/git-bundle-server/internal/argparse"
78
"github.com/github/git-bundle-server/internal/core"
9+
"github.com/github/git-bundle-server/internal/log"
810
)
911

10-
type Delete struct{}
12+
type deleteCmd struct {
13+
logger log.TraceLogger
14+
}
15+
16+
func NewDeleteCommand(logger log.TraceLogger) argparse.Subcommand {
17+
return &deleteCmd{
18+
logger: logger,
19+
}
20+
}
1121

12-
func (Delete) Name() string {
22+
func (deleteCmd) Name() string {
1323
return "delete"
1424
}
1525

16-
func (Delete) Description() string {
26+
func (deleteCmd) Description() string {
1727
return `
1828
Remove the configuration for the given '<route>' and delete its repository
1929
data.`
2030
}
2131

22-
func (Delete) Run(args []string) error {
23-
parser := argparse.NewArgParser("git-bundle-server delete <route>")
32+
func (d *deleteCmd) Run(ctx context.Context, args []string) error {
33+
parser := argparse.NewArgParser(d.logger, "git-bundle-server delete <route>")
2434
route := parser.PositionalString("route", "the route to delete")
25-
parser.Parse(args)
35+
parser.Parse(ctx, args)
2636

2737
repo, err := core.CreateRepository(*route)
2838
if err != nil {
29-
return err
39+
return d.logger.Error(ctx, err)
3040
}
3141

3242
err = core.RemoveRoute(*route)
3343
if err != nil {
34-
return err
44+
return d.logger.Error(ctx, err)
3545
}
3646

3747
err = os.RemoveAll(repo.WebDir)
3848
if err != nil {
39-
return err
49+
return d.logger.Error(ctx, err)
4050
}
4151

4252
err = os.RemoveAll(repo.RepoDir)
4353
if err != nil {
44-
return err
54+
return d.logger.Error(ctx, err)
4555
}
4656

4757
return nil

cmd/git-bundle-server/init.go

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,80 @@
11
package main
22

33
import (
4+
"context"
45
"fmt"
56

67
"github.com/github/git-bundle-server/internal/argparse"
78
"github.com/github/git-bundle-server/internal/bundles"
89
"github.com/github/git-bundle-server/internal/core"
910
"github.com/github/git-bundle-server/internal/git"
11+
"github.com/github/git-bundle-server/internal/log"
1012
)
1113

12-
type Init struct{}
14+
type initCmd struct {
15+
logger log.TraceLogger
16+
}
17+
18+
func NewInitCommand(logger log.TraceLogger) argparse.Subcommand {
19+
return &initCmd{
20+
logger: logger,
21+
}
22+
}
1323

14-
func (Init) Name() string {
24+
func (initCmd) Name() string {
1525
return "init"
1626
}
1727

18-
func (Init) Description() string {
28+
func (initCmd) Description() string {
1929
return `
2030
Initialize a repository by cloning a bare repo from '<url>', whose bundles
2131
should be hosted at '<route>'.`
2232
}
2333

24-
func (Init) Run(args []string) error {
25-
parser := argparse.NewArgParser("git-bundle-server init <url> <route>")
34+
func (i *initCmd) Run(ctx context.Context, args []string) error {
35+
parser := argparse.NewArgParser(i.logger, "git-bundle-server init <url> <route>")
2636
url := parser.PositionalString("url", "the URL of a repository to clone")
2737
// TODO: allow parsing <route> out of <url>
2838
route := parser.PositionalString("route", "the route to host the specified repo")
29-
parser.Parse(args)
39+
parser.Parse(ctx, args)
3040

3141
repo, err := core.CreateRepository(*route)
3242
if err != nil {
33-
return err
43+
return i.logger.Error(ctx, err)
3444
}
3545

3646
fmt.Printf("Cloning repository from %s\n", *url)
3747
gitErr := git.GitCommand("clone", "--bare", *url, repo.RepoDir)
3848

3949
if gitErr != nil {
40-
return fmt.Errorf("failed to clone repository: %w", gitErr)
50+
return i.logger.Errorf(ctx, "failed to clone repository: %w", gitErr)
4151
}
4252

4353
gitErr = git.GitCommand("-C", repo.RepoDir, "config", "remote.origin.fetch", "+refs/heads/*:refs/heads/*")
4454
if gitErr != nil {
45-
return fmt.Errorf("failed to configure refspec: %w", gitErr)
55+
return i.logger.Errorf(ctx, "failed to configure refspec: %w", gitErr)
4656
}
4757

4858
gitErr = git.GitCommand("-C", repo.RepoDir, "fetch", "origin")
4959
if gitErr != nil {
50-
return fmt.Errorf("failed to fetch latest refs: %w", gitErr)
60+
return i.logger.Errorf(ctx, "failed to fetch latest refs: %w", gitErr)
5161
}
5262

5363
bundle := bundles.CreateInitialBundle(repo)
5464
fmt.Printf("Constructing base bundle file at %s\n", bundle.Filename)
5565

5666
written, gitErr := git.CreateBundle(repo.RepoDir, bundle.Filename)
5767
if gitErr != nil {
58-
return fmt.Errorf("failed to create bundle: %w", gitErr)
68+
return i.logger.Errorf(ctx, "failed to create bundle: %w", gitErr)
5969
}
6070
if !written {
61-
return fmt.Errorf("refused to write empty bundle. Is the repo empty?")
71+
return i.logger.Errorf(ctx, "refused to write empty bundle. Is the repo empty?")
6272
}
6373

6474
list := bundles.CreateSingletonList(bundle)
6575
listErr := bundles.WriteBundleList(list, repo)
6676
if listErr != nil {
67-
return fmt.Errorf("failed to write bundle list: %w", listErr)
77+
return i.logger.Errorf(ctx, "failed to write bundle list: %w", listErr)
6878
}
6979

7080
SetCronSchedule()

cmd/git-bundle-server/main.go

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
11
package main
22

33
import (
4-
"log"
4+
"context"
55
"os"
66

77
"github.com/github/git-bundle-server/internal/argparse"
8+
"github.com/github/git-bundle-server/internal/log"
89
)
910

10-
func all() []argparse.Subcommand {
11+
func all(logger log.TraceLogger) []argparse.Subcommand {
1112
return []argparse.Subcommand{
12-
Delete{},
13-
Init{},
14-
Start{},
15-
Stop{},
16-
Update{},
17-
UpdateAll{},
18-
NewWebServerCommand(),
13+
NewDeleteCommand(logger),
14+
NewInitCommand(logger),
15+
NewStartCommand(logger),
16+
NewStopCommand(logger),
17+
NewUpdateCommand(logger),
18+
NewUpdateAllCommand(logger),
19+
NewWebServerCommand(logger),
1920
}
2021
}
2122

2223
func main() {
23-
cmds := all()
24+
log.WithTraceLogger(context.Background(), func(ctx context.Context, logger log.TraceLogger) {
25+
cmds := all(logger)
2426

25-
parser := argparse.NewArgParser("git-bundle-server <command> [<options>]")
26-
parser.SetIsTopLevel(true)
27-
for _, cmd := range cmds {
28-
parser.Subcommand(cmd)
29-
}
30-
parser.Parse(os.Args[1:])
27+
parser := argparse.NewArgParser(logger, "git-bundle-server <command> [<options>]")
28+
parser.SetIsTopLevel(true)
29+
for _, cmd := range cmds {
30+
parser.Subcommand(cmd)
31+
}
32+
parser.Parse(ctx, os.Args[1:])
3133

32-
err := parser.InvokeSubcommand()
33-
if err != nil {
34-
log.Fatal("Failed with error: ", err)
35-
}
34+
err := parser.InvokeSubcommand(ctx)
35+
if err != nil {
36+
logger.Fatalf(ctx, "Failed with error: %s", err)
37+
}
38+
})
3639
}

cmd/git-bundle-server/start.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,48 @@
11
package main
22

33
import (
4-
"fmt"
4+
"context"
55
"os"
66

77
"github.com/github/git-bundle-server/internal/argparse"
88
"github.com/github/git-bundle-server/internal/core"
9+
"github.com/github/git-bundle-server/internal/log"
910
)
1011

11-
type Start struct{}
12+
type startCmd struct {
13+
logger log.TraceLogger
14+
}
15+
16+
func NewStartCommand(logger log.TraceLogger) argparse.Subcommand {
17+
return &startCmd{
18+
logger: logger,
19+
}
20+
}
1221

13-
func (Start) Name() string {
22+
func (startCmd) Name() string {
1423
return "start"
1524
}
1625

17-
func (Start) Description() string {
26+
func (startCmd) Description() string {
1827
return `
1928
Start computing bundles and serving content for the repository at the
2029
specified '<route>'.`
2130
}
2231

23-
func (Start) Run(args []string) error {
24-
parser := argparse.NewArgParser("git-bundle-server start <route>")
32+
func (s *startCmd) Run(ctx context.Context, args []string) error {
33+
parser := argparse.NewArgParser(s.logger, "git-bundle-server start <route>")
2534
route := parser.PositionalString("route", "the route for which bundles should be generated")
26-
parser.Parse(args)
35+
parser.Parse(ctx, args)
2736

2837
// CreateRepository registers the route.
2938
repo, err := core.CreateRepository(*route)
3039
if err != nil {
31-
return err
40+
return s.logger.Error(ctx, err)
3241
}
3342

3443
_, err = os.ReadDir(repo.RepoDir)
3544
if err != nil {
36-
return fmt.Errorf("route '%s' appears to have been deleted; use 'init' instead", *route)
45+
return s.logger.Errorf(ctx, "route '%s' appears to have been deleted; use 'init' instead", *route)
3746
}
3847

3948
// Make sure we have the global schedule running.

cmd/git-bundle-server/stop.go

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,42 @@
11
package main
22

33
import (
4+
"context"
5+
46
"github.com/github/git-bundle-server/internal/argparse"
57
"github.com/github/git-bundle-server/internal/core"
8+
"github.com/github/git-bundle-server/internal/log"
69
)
710

8-
type Stop struct{}
11+
type stopCmd struct {
12+
logger log.TraceLogger
13+
}
914

10-
func (Stop) Name() string {
15+
func NewStopCommand(logger log.TraceLogger) argparse.Subcommand {
16+
return &stopCmd{
17+
logger: logger,
18+
}
19+
}
20+
21+
func (stopCmd) Name() string {
1122
return "stop"
1223
}
1324

14-
func (Stop) Description() string {
25+
func (stopCmd) Description() string {
1526
return `
1627
Stop computing bundles or serving content for the repository at the
1728
specified '<route>'.`
1829
}
1930

20-
func (Stop) Run(args []string) error {
21-
parser := argparse.NewArgParser("git-bundle-server stop <route>")
31+
func (s *stopCmd) Run(ctx context.Context, args []string) error {
32+
parser := argparse.NewArgParser(s.logger, "git-bundle-server stop <route>")
2233
route := parser.PositionalString("route", "the route for which bundles should stop being generated")
23-
parser.Parse(args)
34+
parser.Parse(ctx, args)
35+
36+
err := core.RemoveRoute(*route)
37+
if err != nil {
38+
s.logger.Error(ctx, err)
39+
}
2440

25-
return core.RemoveRoute(*route)
41+
return nil
2642
}

0 commit comments

Comments
 (0)