-
Notifications
You must be signed in to change notification settings - Fork 67
/
command.go
81 lines (75 loc) · 1.88 KB
/
command.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package revert
import (
"errors"
"flag"
"fmt"
"github.com/brimdata/zed/cli/commitflags"
"github.com/brimdata/zed/cli/lakeflags"
"github.com/brimdata/zed/cli/poolflags"
"github.com/brimdata/zed/cmd/zed/root"
"github.com/brimdata/zed/lakeparse"
"github.com/brimdata/zed/pkg/charm"
)
var Cmd = &charm.Spec{
Name: "revert",
Usage: "revert commit",
Short: "revert reverses an old commit",
Long: `
The revert command reverses the actions in a commit by applying the inverse
steps in a new commit to the tip of the indicated branch. Any data loaded
in a reverted commit remains in the lake but no longer appears in the branch.
The new commit may recursively be reverted by an additional revert operation.
`,
New: New,
}
type Command struct {
*root.Command
commitFlags commitflags.Flags
poolFlags poolflags.Flags
}
func New(parent charm.Command, f *flag.FlagSet) (charm.Command, error) {
c := &Command{Command: parent.(*root.Command)}
c.commitFlags.SetFlags(f)
c.poolFlags.SetFlags(f)
return c, nil
}
func (c *Command) Run(args []string) error {
ctx, cleanup, err := c.Init()
if err != nil {
return err
}
defer cleanup()
if len(args) != 1 {
return errors.New("commit ID must be specified")
}
lake, err := c.LakeFlags.Open(ctx)
if err != nil {
return err
}
head, err := c.poolFlags.HEAD()
if err != nil {
return err
}
if head.Pool == "" {
return lakeflags.ErrNoHEAD
}
poolID, err := lake.PoolID(ctx, head.Pool)
if err != nil {
return err
}
if _, err := lakeparse.ParseID(head.Branch); err == nil {
return errors.New("branch must be named")
}
commitID, err := lakeparse.ParseID(args[0])
if err != nil {
return err
}
revertID, err := lake.Revert(ctx, poolID, head.Branch, commitID, c.commitFlags.CommitMessage())
if err != nil {
return err
}
if !c.LakeFlags.Quiet {
fmt.Printf("%q: %s reverted in %s\n", head.Branch, commitID, revertID)
}
return nil
}