@@ -4,24 +4,36 @@ import (
4
4
"context"
5
5
"fmt"
6
6
"io"
7
+ "os"
8
+ "path/filepath"
7
9
8
10
"github.com/qri-io/dataset"
9
11
"github.com/qri-io/ioes"
10
12
"github.com/qri-io/qfs"
13
+ "github.com/qri-io/qri/actions"
11
14
"github.com/qri-io/qri/base"
12
15
"github.com/qri-io/qri/cron"
13
16
"github.com/qri-io/qri/repo"
14
17
)
15
18
16
19
// NewUpdateMethods creates a configuration handle from an instance
17
20
func NewUpdateMethods (inst * Instance ) * UpdateMethods {
18
- return & UpdateMethods {inst : inst }
21
+ m := & UpdateMethods {
22
+ inst : inst ,
23
+ scriptsPath : filepath .Join (inst .QriPath (), "update_scripts" ),
24
+ }
25
+
26
+ if err := os .MkdirAll (m .scriptsPath , os .ModePerm ); err != nil {
27
+ log .Error ("creating update scripts directory: %s" , err .Error ())
28
+ }
29
+
30
+ return m
19
31
}
20
32
21
33
// UpdateMethods enapsulates logic for scheduled updates
22
34
type UpdateMethods struct {
23
35
inst * Instance
24
- ScriptsPath string
36
+ scriptsPath string
25
37
}
26
38
27
39
// CoreRequestsName specifies this is a Methods object
@@ -43,6 +55,12 @@ type ScheduleParams struct {
43
55
44
56
// Schedule creates a job and adds it to the scheduler
45
57
func (m * UpdateMethods ) Schedule (in * ScheduleParams , out * cron.Job ) (err error ) {
58
+ if base .PossibleShellScript (in .Name ) {
59
+ if err = qfs .AbsPath (& in .Name ); err != nil {
60
+ return
61
+ }
62
+ }
63
+
46
64
if m .inst .rpc != nil {
47
65
return m .inst .rpc .Call ("UpdateMethods.Schedule" , in , out )
48
66
}
@@ -64,6 +82,7 @@ func (m *UpdateMethods) Schedule(in *ScheduleParams, out *cron.Job) (err error)
64
82
65
83
func (m * UpdateMethods ) jobFromScheduleParams (p * ScheduleParams ) (job * cron.Job , err error ) {
66
84
if base .PossibleShellScript (p .Name ) {
85
+ // TODO (b5) - confirm file exists & is executable
67
86
return base .ShellScriptToJob (qfs .NewMemfileBytes (p .Name , nil ), p .Periodicity , nil )
68
87
}
69
88
@@ -170,7 +189,7 @@ func (m *UpdateMethods) Run(p *Job, res *repo.DatasetRef) (err error) {
170
189
err = m .runDatasetUpdate (updateParams , res )
171
190
172
191
case cron .JTShellScript :
173
- runner := base .LocalShellScriptRunner (m .ScriptsPath )
192
+ runner := base .LocalShellScriptRunner (m .scriptsPath )
174
193
err = runner (m .inst .ctx , m .inst .streams , p )
175
194
176
195
default :
@@ -214,10 +233,10 @@ func (m *UpdateMethods) runDatasetUpdate(p *UpdateParams, res *repo.DatasetRef)
214
233
return err
215
234
}
216
235
217
- // if !base.InLocalNamespace(m.inst.Repo(), &ref) {
218
- // *res, err = actions.UpdateRemoteDataset(m.node , &ref, true)
219
- // return err
220
- // }
236
+ if ! base .InLocalNamespace (m .inst .Repo (), & ref ) {
237
+ * res , err = actions .UpdateRemoteDataset (m .inst . Node () , & ref , true )
238
+ return err
239
+ }
221
240
222
241
// default to recalling transfrom scripts for local updates
223
242
// TODO (b5): not sure if this should be here or in client libraries
@@ -261,7 +280,6 @@ func newUpdateRunner(newInst func(ctx context.Context, streams ioes.IOStreams) (
261
280
}
262
281
263
282
m := NewUpdateMethods (inst )
264
- m .ScriptsPath = scriptsPath
265
283
res := & repo.DatasetRef {}
266
284
return m .Run (job , res )
267
285
}
0 commit comments