Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit e37fbae

Browse files
committedJun 3, 2015
add two new subcommands to object patch and clean up main Run func
1 parent f4fcb6c commit e37fbae

File tree

1 file changed

+99
-23
lines changed

1 file changed

+99
-23
lines changed
 

‎core/commands/object.go

+99-23
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ resulting object hash.
433433
Arguments: []cmds.Argument{
434434
cmds.StringArg("root", true, false, "the hash of the node to modify"),
435435
cmds.StringArg("command", true, false, "the operation to perform"),
436-
cmds.StringArg("args", true, true, "extra arguments"),
436+
cmds.StringArg("args", true, true, "extra arguments").EnableStdin(),
437437
},
438438
Type: u.Key(""),
439439
Run: func(req cmds.Request, res cmds.Response) {
@@ -461,43 +461,33 @@ resulting object hash.
461461

462462
switch action {
463463
case "add-link":
464-
if len(req.Arguments()) < 4 {
465-
res.SetError(fmt.Errorf("not enough arguments for add-link"), cmds.ErrClient)
466-
return
467-
}
468-
469-
name := req.Arguments()[2]
470-
childk := u.B58KeyDecode(req.Arguments()[3])
471-
472-
newkey, err := addLink(req.Context().Context, nd.DAG, rnode, name, childk)
464+
k, err := addLinkCaller(req, rnode)
473465
if err != nil {
474466
res.SetError(err, cmds.ErrNormal)
475467
return
476468
}
477-
478-
res.SetOutput(newkey)
479-
469+
res.SetOutput(k)
480470
case "rm-link":
481-
if len(req.Arguments()) < 3 {
482-
res.SetError(fmt.Errorf("not enough arguments for rm-link"), cmds.ErrClient)
471+
k, err := rmLinkCaller(req, rnode)
472+
if err != nil {
473+
res.SetError(err, cmds.ErrNormal)
483474
return
484475
}
485-
486-
name := req.Arguments()[2]
487-
488-
err := rnode.RemoveNodeLink(name)
476+
res.SetOutput(k)
477+
case "set-data":
478+
k, err := setDataCaller(req, rnode)
489479
if err != nil {
490480
res.SetError(err, cmds.ErrNormal)
491481
return
492482
}
493-
494-
newkey, err := nd.DAG.Add(rnode)
483+
res.SetOutput(k)
484+
case "append-data":
485+
k, err := appendDataCaller(req, rnode)
495486
if err != nil {
496487
res.SetError(err, cmds.ErrNormal)
497488
return
498489
}
499-
500-
res.SetOutput(newkey)
490+
res.SetOutput(k)
501491
default:
502492
res.SetError(fmt.Errorf("unrecognized subcommand"), cmds.ErrNormal)
503493
return
@@ -515,6 +505,92 @@ resulting object hash.
515505
},
516506
}
517507

508+
func appendDataCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
509+
if len(req.Arguments()) < 3 {
510+
return "", fmt.Errorf("not enough arguments for set-data")
511+
}
512+
513+
nd, err := req.Context().GetNode()
514+
if err != nil {
515+
return "", err
516+
}
517+
518+
root.Data = append(root.Data, []byte(req.Arguments()[2])...)
519+
520+
newkey, err := nd.DAG.Add(root)
521+
if err != nil {
522+
return "", err
523+
}
524+
525+
return newkey, nil
526+
}
527+
528+
func setDataCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
529+
if len(req.Arguments()) < 3 {
530+
return "", fmt.Errorf("not enough arguments for set-data")
531+
}
532+
533+
nd, err := req.Context().GetNode()
534+
if err != nil {
535+
return "", err
536+
}
537+
538+
root.Data = []byte(req.Arguments()[2])
539+
540+
newkey, err := nd.DAG.Add(root)
541+
if err != nil {
542+
return "", err
543+
}
544+
545+
return newkey, nil
546+
}
547+
548+
func rmLinkCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
549+
if len(req.Arguments()) < 3 {
550+
return "", fmt.Errorf("not enough arguments for rm-link")
551+
}
552+
553+
nd, err := req.Context().GetNode()
554+
if err != nil {
555+
return "", err
556+
}
557+
558+
name := req.Arguments()[2]
559+
560+
err = root.RemoveNodeLink(name)
561+
if err != nil {
562+
return "", err
563+
}
564+
565+
newkey, err := nd.DAG.Add(root)
566+
if err != nil {
567+
return "", err
568+
}
569+
570+
return newkey, nil
571+
}
572+
573+
func addLinkCaller(req cmds.Request, root *dag.Node) (u.Key, error) {
574+
if len(req.Arguments()) < 4 {
575+
return "", fmt.Errorf("not enough arguments for add-link")
576+
}
577+
578+
nd, err := req.Context().GetNode()
579+
if err != nil {
580+
return "", err
581+
}
582+
583+
name := req.Arguments()[2]
584+
childk := u.B58KeyDecode(req.Arguments()[3])
585+
586+
newkey, err := addLink(req.Context().Context, nd.DAG, root, name, childk)
587+
if err != nil {
588+
return "", err
589+
}
590+
591+
return newkey, nil
592+
}
593+
518594
func addLink(ctx context.Context, ds dag.DAGService, root *dag.Node, childname string, childk u.Key) (u.Key, error) {
519595
ctx, cancel := context.WithTimeout(ctx, time.Second*30)
520596
childnd, err := ds.Get(ctx, childk)

0 commit comments

Comments
 (0)
Please sign in to comment.