1
1
package objectcmd
2
2
3
3
import (
4
- "bytes"
5
4
"fmt"
6
5
"io"
7
6
8
- cmds "github.com/ipfs/go-ipfs/commands"
9
- e "github.com/ipfs/go-ipfs/core/commands/e"
7
+ cmdenv "github.com/ipfs/go-ipfs/core/commands/cmdenv"
10
8
coreiface "github.com/ipfs/go-ipfs/core/coreapi/interface"
11
9
"github.com/ipfs/go-ipfs/dagutils"
12
10
11
+ cmds "gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds"
13
12
cmdkit "gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
14
13
)
15
14
15
+ const (
16
+ verboseOptionName = "verbose"
17
+ )
18
+
16
19
type Changes struct {
17
20
Changes []* dagutils.Change
18
21
}
@@ -49,34 +52,30 @@ Example:
49
52
cmdkit .StringArg ("obj_b" , true , false , "Object to diff." ),
50
53
},
51
54
Options : []cmdkit.Option {
52
- cmdkit .BoolOption ("verbose" , "v" , "Print extra information." ),
55
+ cmdkit .BoolOption (verboseOptionName , "v" , "Print extra information." ),
53
56
},
54
- Run : func (req cmds.Request , res cmds.Response ) {
55
- api , err := req . InvocContext (). GetApi ()
57
+ Run : func (req * cmds.Request , res cmds.ResponseEmitter , env cmds. Environment ) error {
58
+ api , err := cmdenv . GetApi (env )
56
59
if err != nil {
57
- res .SetError (err , cmdkit .ErrNormal )
58
- return
60
+ return err
59
61
}
60
62
61
- a := req .Arguments () [0 ]
62
- b := req .Arguments () [1 ]
63
+ a := req .Arguments [0 ]
64
+ b := req .Arguments [1 ]
63
65
64
66
pa , err := coreiface .ParsePath (a )
65
67
if err != nil {
66
- res .SetError (err , cmdkit .ErrNormal )
67
- return
68
+ return err
68
69
}
69
70
70
71
pb , err := coreiface .ParsePath (b )
71
72
if err != nil {
72
- res .SetError (err , cmdkit .ErrNormal )
73
- return
73
+ return err
74
74
}
75
75
76
- changes , err := api .Object ().Diff (req .Context () , pa , pb )
76
+ changes , err := api .Object ().Diff (req .Context , pa , pb )
77
77
if err != nil {
78
- res .SetError (err , cmdkit .ErrNormal )
79
- return
78
+ return err
80
79
}
81
80
82
81
out := make ([]* dagutils.Change , len (changes ))
@@ -95,45 +94,36 @@ Example:
95
94
}
96
95
}
97
96
98
- res . SetOutput ( & Changes {out })
97
+ return cmds . EmitOnce ( res , & Changes {out })
99
98
},
100
99
Type : Changes {},
101
- Marshalers : cmds.MarshalerMap {
102
- cmds .Text : func (res cmds.Response ) (io.Reader , error ) {
103
- v , err := unwrapOutput (res .Output ())
104
- if err != nil {
105
- return nil , err
106
- }
100
+ Encoders : cmds.EncoderMap {
101
+ cmds .Text : cmds .MakeTypedEncoder (func (req * cmds.Request , w io.Writer , out * Changes ) error {
102
+ verbose , _ := req .Options [verboseOptionName ].(bool )
107
103
108
- verbose , _ , _ := res .Request ().Option ("v" ).Bool ()
109
- changes , ok := v .(* Changes )
110
- if ! ok {
111
- return nil , e .TypeErr (changes , v )
112
- }
113
-
114
- buf := new (bytes.Buffer )
115
- for _ , change := range changes .Changes {
104
+ for _ , change := range out .Changes {
116
105
if verbose {
117
106
switch change .Type {
118
107
case dagutils .Add :
119
- fmt .Fprintf (buf , "Added new link %q pointing to %s.\n " , change .Path , change .After )
108
+ fmt .Fprintf (w , "Added new link %q pointing to %s.\n " , change .Path , change .After )
120
109
case dagutils .Mod :
121
- fmt .Fprintf (buf , "Changed %q from %s to %s.\n " , change .Path , change .Before , change .After )
110
+ fmt .Fprintf (w , "Changed %q from %s to %s.\n " , change .Path , change .Before , change .After )
122
111
case dagutils .Remove :
123
- fmt .Fprintf (buf , "Removed link %q (was %s).\n " , change .Path , change .Before )
112
+ fmt .Fprintf (w , "Removed link %q (was %s).\n " , change .Path , change .Before )
124
113
}
125
114
} else {
126
115
switch change .Type {
127
116
case dagutils .Add :
128
- fmt .Fprintf (buf , "+ %s %q\n " , change .After , change .Path )
117
+ fmt .Fprintf (w , "+ %s %q\n " , change .After , change .Path )
129
118
case dagutils .Mod :
130
- fmt .Fprintf (buf , "~ %s %s %q\n " , change .Before , change .After , change .Path )
119
+ fmt .Fprintf (w , "~ %s %s %q\n " , change .Before , change .After , change .Path )
131
120
case dagutils .Remove :
132
- fmt .Fprintf (buf , "- %s %q\n " , change .Before , change .Path )
121
+ fmt .Fprintf (w , "- %s %q\n " , change .Before , change .Path )
133
122
}
134
123
}
135
124
}
136
- return buf , nil
137
- },
125
+
126
+ return nil
127
+ }),
138
128
},
139
129
}
0 commit comments