From 72eff156a90d1ac38d6e723f0876353e77209c6d Mon Sep 17 00:00:00 2001 From: Russtopia Date: Fri, 19 Jun 2020 12:47:36 -0700 Subject: [PATCH] coder sync fails if all dirs leading to sync remoteDir don't already exist --- cmd/coder/sync.go | 2 +- internal/sync/sync.go | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/cmd/coder/sync.go b/cmd/coder/sync.go index 12f41538..9aa0a0ca 100644 --- a/cmd/coder/sync.go +++ b/cmd/coder/sync.go @@ -27,7 +27,7 @@ func (cmd *syncCmd) Spec() cli.CommandSpec { } func (cmd *syncCmd) RegisterFlags(fl *pflag.FlagSet) { - fl.BoolVarP(&cmd.init, "init", "i", false, "do inititial transfer and exit") + fl.BoolVarP(&cmd.init, "init", "i", false, "do initial transfer and exit") } // See https://lxadm.com/Rsync_exit_codes#List_of_standard_rsync_exit_codes. diff --git a/internal/sync/sync.go b/internal/sync/sync.go index b9e8c4c4..4e9c6f8e 100644 --- a/internal/sync/sync.go +++ b/internal/sync/sync.go @@ -71,7 +71,7 @@ func (s Sync) syncPaths(delete bool, local, remote string) error { return nil } -func (s Sync) remoteRm(ctx context.Context, remote string) error { +func (s Sync) remoteCmd(ctx context.Context, prog string, args ...string) error { conn, err := s.Client.DialWsep(ctx, s.Env) if err != nil { return err @@ -80,8 +80,8 @@ func (s Sync) remoteRm(ctx context.Context, remote string) error { execer := wsep.RemoteExecer(conn) process, err := execer.Start(ctx, wsep.Command{ - Command: "rm", - Args: []string{"-rf", remote}, + Command: prog, + Args: args, }) if err != nil { return err @@ -91,7 +91,7 @@ func (s Sync) remoteRm(ctx context.Context, remote string) error { err = process.Wait() if code, ok := err.(wsep.ExitError); ok { - return fmt.Errorf("rm exit status: %v", code) + return fmt.Errorf("%s exit status: %v", prog, code) } if err != nil { return xerrors.Errorf("execution failure: %w", err) @@ -144,7 +144,7 @@ func (s Sync) handleDelete(localPath string) error { ctx, cancel := context.WithTimeout(context.Background(), time.Minute) defer cancel() - return s.remoteRm(ctx, s.convertPath(localPath)) + return s.remoteCmd(ctx, "rm", "-rf", s.convertPath(localPath)) } func (s Sync) handleRename(localPath string) error { @@ -260,6 +260,11 @@ func (s Sync) Run() error { } defer notify.Stop(events) + ctx, cancel := context.WithTimeout(context.Background(), time.Minute) + defer cancel() + + s.remoteCmd(ctx, "mkdir", "-p", s.RemoteDir) + ap := activity.NewPusher(s.Client, s.Env.ID, activityName) ap.Push()