@@ -3,58 +3,52 @@ package generator
3
3
import (
4
4
"bytes"
5
5
"fmt"
6
+ "go/format"
6
7
"io/ioutil"
7
8
"os"
8
9
"path/filepath"
10
+ "strconv"
9
11
"text/template"
10
- )
11
-
12
- var latestVersion = 8
13
-
14
- var versions = []int {0 , 2 , 3 , 4 , 5 , 6 , 7 , latestVersion }
15
12
16
- var versionImports = map [int ]string {
17
- 0 : "/" ,
18
- 2 : "/v2/" ,
19
- 3 : "/v3/" ,
20
- 4 : "/v4/" ,
21
- 5 : "/v5/" ,
22
- 6 : "/v6/" ,
23
- 7 : "/v7/" ,
24
- latestVersion : "/v8/" ,
25
- }
13
+ lotusactors "github.com/filecoin-project/lotus/chain/actors"
14
+ "golang.org/x/xerrors"
15
+ )
26
16
27
17
var actors = map [string ][]int {
28
- "init" : versions ,
29
- "market" : versions ,
30
- "miner" : versions ,
31
- "multisig" : versions ,
32
- "power" : versions ,
33
- "reward" : versions ,
34
- "verifreg" : versions ,
18
+ //"account": lotusactors.Versions,
19
+ //"cron": lotusactors.Versions,
20
+ "init" : lotusactors .Versions ,
21
+ "market" : lotusactors .Versions ,
22
+ "miner" : lotusactors .Versions ,
23
+ "multisig" : lotusactors .Versions ,
24
+ //"paych": lotusactors.Versions,
25
+ "power" : lotusactors .Versions ,
26
+ //"system": lotusactors.Versions,
27
+ "reward" : lotusactors .Versions ,
28
+ "verifreg" : lotusactors .Versions ,
29
+ "datacap" : lotusactors .Versions [8 :],
35
30
}
36
31
37
32
func Gen () error {
38
33
if err := generateAdapters (); err != nil {
39
34
return err
40
35
}
41
36
42
- if err := generatePolicy (); err != nil {
37
+ if err := generatePolicy ("chain/actors/policy/policy.go" ); err != nil {
43
38
return err
44
39
}
45
40
46
- if err := generateBuiltin (); err != nil {
41
+ if err := generateBuiltin ("chain/actors/builtin/builtin.go" ); err != nil {
47
42
return err
48
43
}
49
44
return nil
50
45
}
51
46
52
47
func generateAdapters () error {
53
- actorsDir := "chain/actors/builtin"
54
48
for act , versions := range actors {
55
- actDir := filepath .Join (actorsDir , act )
49
+ actDir := filepath .Join ("chain/actors/builtin" , act )
56
50
57
- if err := generateState (actDir ); err != nil {
51
+ if err := generateState (actDir , versions ); err != nil {
58
52
return err
59
53
}
60
54
@@ -65,24 +59,29 @@ func generateAdapters() error {
65
59
{
66
60
af , err := ioutil .ReadFile (filepath .Join (actDir , "actor.go.template" ))
67
61
if err != nil {
68
- return fmt .Errorf ("loading actor template: %w" , err )
62
+ return xerrors .Errorf ("loading actor template: %w" , err )
69
63
}
70
64
71
65
tpl := template .Must (template .New ("" ).Funcs (template.FuncMap {
72
- "import" : func (v int ) string { return versionImports [v ] },
66
+ "import" : func (v int ) string { return getVersionImports () [v ] },
73
67
}).Parse (string (af )))
74
68
75
69
var b bytes.Buffer
76
70
77
71
err = tpl .Execute (& b , map [string ]interface {}{
78
72
"versions" : versions ,
79
- "latestVersion" : latestVersion ,
73
+ "latestVersion" : lotusactors . LatestVersion ,
80
74
})
81
75
if err != nil {
82
76
return err
83
77
}
84
78
85
- if err := ioutil .WriteFile (filepath .Join (actDir , fmt .Sprintf ("%s.go" , act )), b .Bytes (), 0o666 ); err != nil {
79
+ fmted , err := format .Source (b .Bytes ())
80
+ if err != nil {
81
+ return err
82
+ }
83
+
84
+ if err := ioutil .WriteFile (filepath .Join (actDir , fmt .Sprintf ("%s.go" , act )), fmted , 0666 ); err != nil {
86
85
return err
87
86
}
88
87
}
@@ -91,31 +90,31 @@ func generateAdapters() error {
91
90
return nil
92
91
}
93
92
94
- func generateState (actDir string ) error {
93
+ func generateState (actDir string , versions [] int ) error {
95
94
af , err := ioutil .ReadFile (filepath .Join (actDir , "state.go.template" ))
96
95
if err != nil {
97
96
if os .IsNotExist (err ) {
98
97
return nil // skip
99
98
}
100
99
101
- return fmt .Errorf ("loading state adapter template: %w" , err )
100
+ return xerrors .Errorf ("loading state adapter template: %w" , err )
102
101
}
103
102
104
103
for _ , version := range versions {
105
- fmt .Println ("parsing" , actDir )
106
104
tpl := template .Must (template .New ("" ).Funcs (template.FuncMap {}).Parse (string (af )))
107
105
108
106
var b bytes.Buffer
109
107
110
108
err := tpl .Execute (& b , map [string ]interface {}{
111
- "v" : version ,
112
- "import" : versionImports [version ],
109
+ "v" : version ,
110
+ "import" : getVersionImports ()[version ],
111
+ "latestVersion" : lotusactors .LatestVersion ,
113
112
})
114
113
if err != nil {
115
114
return err
116
115
}
117
116
118
- if err := ioutil .WriteFile (filepath .Join (actDir , fmt .Sprintf ("v%d.go" , version )), b .Bytes (), 0o666 ); err != nil {
117
+ if err := ioutil .WriteFile (filepath .Join (actDir , fmt .Sprintf ("v%d.go" , version )), b .Bytes (), 0666 ); err != nil {
119
118
return err
120
119
}
121
120
}
@@ -130,88 +129,102 @@ func generateMessages(actDir string) error {
130
129
return nil // skip
131
130
}
132
131
133
- return fmt .Errorf ("loading message adapter template: %w" , err )
132
+ return xerrors .Errorf ("loading message adapter template: %w" , err )
134
133
}
135
134
136
- for _ , version := range versions {
135
+ for _ , version := range lotusactors . Versions {
137
136
tpl := template .Must (template .New ("" ).Funcs (template.FuncMap {}).Parse (string (af )))
138
137
139
138
var b bytes.Buffer
140
139
141
140
err := tpl .Execute (& b , map [string ]interface {}{
142
- "v" : version ,
143
- "import" : versionImports [version ],
141
+ "v" : version ,
142
+ "import" : getVersionImports ()[version ],
143
+ "latestVersion" : lotusactors .LatestVersion ,
144
144
})
145
145
if err != nil {
146
146
return err
147
147
}
148
148
149
- if err := ioutil .WriteFile (filepath .Join (actDir , fmt .Sprintf ("message%d.go" , version )), b .Bytes (), 0o666 ); err != nil {
149
+ if err := ioutil .WriteFile (filepath .Join (actDir , fmt .Sprintf ("message%d.go" , version )), b .Bytes (), 0666 ); err != nil {
150
150
return err
151
151
}
152
152
}
153
153
154
154
return nil
155
155
}
156
156
157
- func generatePolicy () error {
158
- policyPath := "chain/actors/policy/policy.go"
157
+ func generatePolicy (policyPath string ) error {
158
+
159
159
pf , err := ioutil .ReadFile (policyPath + ".template" )
160
160
if err != nil {
161
161
if os .IsNotExist (err ) {
162
162
return nil // skip
163
163
}
164
164
165
- return fmt .Errorf ("loading policy template file: %w" , err )
165
+ return xerrors .Errorf ("loading policy template file: %w" , err )
166
166
}
167
167
168
168
tpl := template .Must (template .New ("" ).Funcs (template.FuncMap {
169
- "import" : func (v int ) string { return versionImports [v ] },
169
+ "import" : func (v int ) string { return getVersionImports () [v ] },
170
170
}).Parse (string (pf )))
171
171
var b bytes.Buffer
172
172
173
173
err = tpl .Execute (& b , map [string ]interface {}{
174
- "versions" : versions ,
175
- "latestVersion" : latestVersion ,
174
+ "versions" : lotusactors . Versions ,
175
+ "latestVersion" : lotusactors . LatestVersion ,
176
176
})
177
177
if err != nil {
178
178
return err
179
179
}
180
180
181
- if err := ioutil .WriteFile (policyPath , b .Bytes (), 0o666 ); err != nil {
181
+ if err := ioutil .WriteFile (policyPath , b .Bytes (), 0666 ); err != nil {
182
182
return err
183
183
}
184
184
185
185
return nil
186
186
}
187
187
188
- func generateBuiltin () error {
189
- builtinPath := "chain/actors/builtin/builtin.go"
188
+ func generateBuiltin (builtinPath string ) error {
189
+
190
190
bf , err := ioutil .ReadFile (builtinPath + ".template" )
191
191
if err != nil {
192
192
if os .IsNotExist (err ) {
193
193
return nil // skip
194
194
}
195
195
196
- return fmt .Errorf ("loading builtin template file: %w" , err )
196
+ return xerrors .Errorf ("loading builtin template file: %w" , err )
197
197
}
198
198
199
199
tpl := template .Must (template .New ("" ).Funcs (template.FuncMap {
200
- "import" : func (v int ) string { return versionImports [v ] },
200
+ "import" : func (v int ) string { return getVersionImports () [v ] },
201
201
}).Parse (string (bf )))
202
202
var b bytes.Buffer
203
203
204
204
err = tpl .Execute (& b , map [string ]interface {}{
205
- "versions" : versions ,
206
- "latestVersion" : latestVersion ,
205
+ "versions" : lotusactors . Versions ,
206
+ "latestVersion" : lotusactors . LatestVersion ,
207
207
})
208
208
if err != nil {
209
209
return err
210
210
}
211
211
212
- if err := ioutil .WriteFile (builtinPath , b .Bytes (), 0o666 ); err != nil {
212
+ if err := ioutil .WriteFile (builtinPath , b .Bytes (), 0666 ); err != nil {
213
213
return err
214
214
}
215
215
216
216
return nil
217
217
}
218
+
219
+ func getVersionImports () map [int ]string {
220
+ versionImports := make (map [int ]string , lotusactors .LatestVersion )
221
+ for _ , v := range lotusactors .Versions {
222
+ if v == 0 {
223
+ versionImports [v ] = "/"
224
+ } else {
225
+ versionImports [v ] = "/v" + strconv .Itoa (v ) + "/"
226
+ }
227
+ }
228
+
229
+ return versionImports
230
+ }
0 commit comments