@@ -4,24 +4,36 @@ import (
44 "context"
55 "fmt"
66 "io"
7+ "os"
8+ "path/filepath"
79
810 "github.com/qri-io/dataset"
911 "github.com/qri-io/ioes"
1012 "github.com/qri-io/qfs"
13+ "github.com/qri-io/qri/actions"
1114 "github.com/qri-io/qri/base"
1215 "github.com/qri-io/qri/cron"
1316 "github.com/qri-io/qri/repo"
1417)
1518
1619// NewUpdateMethods creates a configuration handle from an instance
1720func 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
1931}
2032
2133// UpdateMethods enapsulates logic for scheduled updates
2234type UpdateMethods struct {
2335 inst * Instance
24- ScriptsPath string
36+ scriptsPath string
2537}
2638
2739// CoreRequestsName specifies this is a Methods object
@@ -43,6 +55,12 @@ type ScheduleParams struct {
4355
4456// Schedule creates a job and adds it to the scheduler
4557func (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+
4664 if m .inst .rpc != nil {
4765 return m .inst .rpc .Call ("UpdateMethods.Schedule" , in , out )
4866 }
@@ -64,6 +82,7 @@ func (m *UpdateMethods) Schedule(in *ScheduleParams, out *cron.Job) (err error)
6482
6583func (m * UpdateMethods ) jobFromScheduleParams (p * ScheduleParams ) (job * cron.Job , err error ) {
6684 if base .PossibleShellScript (p .Name ) {
85+ // TODO (b5) - confirm file exists & is executable
6786 return base .ShellScriptToJob (qfs .NewMemfileBytes (p .Name , nil ), p .Periodicity , nil )
6887 }
6988
@@ -170,7 +189,7 @@ func (m *UpdateMethods) Run(p *Job, res *repo.DatasetRef) (err error) {
170189 err = m .runDatasetUpdate (updateParams , res )
171190
172191 case cron .JTShellScript :
173- runner := base .LocalShellScriptRunner (m .ScriptsPath )
192+ runner := base .LocalShellScriptRunner (m .scriptsPath )
174193 err = runner (m .inst .ctx , m .inst .streams , p )
175194
176195 default :
@@ -214,10 +233,10 @@ func (m *UpdateMethods) runDatasetUpdate(p *UpdateParams, res *repo.DatasetRef)
214233 return err
215234 }
216235
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+ }
221240
222241 // default to recalling transfrom scripts for local updates
223242 // 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) (
261280 }
262281
263282 m := NewUpdateMethods (inst )
264- m .ScriptsPath = scriptsPath
265283 res := & repo.DatasetRef {}
266284 return m .Run (job , res )
267285 }
0 commit comments