Skip to content

Commit

Permalink
add two new subcommands to object patch and clean up main Run func
Browse files Browse the repository at this point in the history
  • Loading branch information
whyrusleeping committed Jun 3, 2015
1 parent 6f0abb7 commit b70dd34
Showing 1 changed file with 99 additions and 23 deletions.
122 changes: 99 additions & 23 deletions core/commands/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -433,7 +433,7 @@ resulting object hash.
Arguments: []cmds.Argument{
cmds.StringArg("root", true, false, "the hash of the node to modify"),
cmds.StringArg("command", true, false, "the operation to perform"),
cmds.StringArg("args", true, true, "extra arguments"),
cmds.StringArg("args", true, true, "extra arguments").EnableStdin(),
},
Type: u.Key(""),
Run: func(req cmds.Request, res cmds.Response) {
Expand Down Expand Up @@ -461,43 +461,33 @@ resulting object hash.

switch action {
case "add-link":
if len(req.Arguments()) < 4 {
res.SetError(fmt.Errorf("not enough arguments for add-link"), cmds.ErrClient)
return
}

name := req.Arguments()[2]
childk := u.B58KeyDecode(req.Arguments()[3])

newkey, err := addLink(req.Context().Context, nd.DAG, rnode, name, childk)
k, err := addLinkCaller(req, rnode)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}

res.SetOutput(newkey)

res.SetOutput(k)
case "rm-link":
if len(req.Arguments()) < 3 {
res.SetError(fmt.Errorf("not enough arguments for rm-link"), cmds.ErrClient)
k, err := rmLinkCaller(req, rnode)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}

name := req.Arguments()[2]

err := rnode.RemoveNodeLink(name)
res.SetOutput(k)
case "set-data":
k, err := setDataCaller(req, rnode)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}

newkey, err := nd.DAG.Add(rnode)
res.SetOutput(k)
case "append-data":
k, err := appendDataCaller(req, rnode)
if err != nil {
res.SetError(err, cmds.ErrNormal)
return
}

res.SetOutput(newkey)
res.SetOutput(k)
default:
res.SetError(fmt.Errorf("unrecognized subcommand"), cmds.ErrNormal)
return
Expand All @@ -515,6 +505,92 @@ resulting object hash.
},
}

func appendDataCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
if len(req.Arguments()) < 3 {
return "", fmt.Errorf("not enough arguments for set-data")
}

nd, err := req.Context().GetNode()
if err != nil {
return "", err
}

root.Data = append(root.Data, []byte(req.Arguments()[2])...)

newkey, err := nd.DAG.Add(root)
if err != nil {
return "", err
}

return newkey, nil
}

func setDataCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
if len(req.Arguments()) < 3 {
return "", fmt.Errorf("not enough arguments for set-data")
}

nd, err := req.Context().GetNode()
if err != nil {
return "", err
}

root.Data = []byte(req.Arguments()[2])

newkey, err := nd.DAG.Add(root)
if err != nil {
return "", err
}

return newkey, nil
}

func rmLinkCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
if len(req.Arguments()) < 3 {
return "", fmt.Errorf("not enough arguments for rm-link")
}

nd, err := req.Context().GetNode()
if err != nil {
return "", err
}

name := req.Arguments()[2]

err = root.RemoveNodeLink(name)
if err != nil {
return "", err
}

newkey, err := nd.DAG.Add(root)
if err != nil {
return "", err
}

return newkey, nil
}

func addLinkCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
if len(req.Arguments()) < 4 {
return "", fmt.Errorf("not enough arguments for add-link")
}

nd, err := req.Context().GetNode()
if err != nil {
return "", err
}

name := req.Arguments()[2]
childk := u.B58KeyDecode(req.Arguments()[3])

newkey, err := addLink(req.Context().Context, nd.DAG, root, name, childk)
if err != nil {
return "", err
}

return newkey, nil
}

func addLink(ctx context.Context, ds dag.DAGService, root *dag.Node, childname string, childk u.Key) (u.Key, error) {
ctx, cancel := context.WithTimeout(ctx, time.Second*30)
childnd, err := ds.Get(ctx, childk)
Expand Down

0 comments on commit b70dd34

Please sign in to comment.