@@ -21,9 +21,11 @@ import (
2121 "fmt"
2222 "io"
2323 "strconv"
24+ "strings"
2425 "time"
2526
2627 "github.com/cenkalti/backoff/v4"
28+ "go.opentelemetry.io/otel/trace"
2729
2830 "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/constants"
2931 "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/event"
@@ -93,29 +95,16 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error {
9395 instrumentation .AddDevIteration ("sync" )
9496 meterUpdated = true
9597
96- syncHandler := func (s * sync.Item ) error {
97- fileCount := len (s .Copy ) + len (s .Delete )
98- output .Default .Fprintf (out , "Syncing %d files for %s\n " , fileCount , s .Image )
99- fileSyncInProgress (fileCount , s .Image )
100-
101- if err := r .deployer .GetSyncer ().Sync (childCtx , out , s ); err != nil {
102- log .Entry (ctx ).Warn ("Skipping deploy due to sync error:" , err )
103- fileSyncFailed (fileCount , s .Image , err )
104- event .DevLoopFailedInPhase (r .devIteration , constants .Sync , err )
105- eventV2 .TaskFailed (constants .DevLoop , err )
106- endTrace (instrumentation .TraceEndError (err ))
107-
108- return err
109- }
110-
111- fileSyncSucceeded (fileCount , s .Image )
112-
113- return nil
114- }
98+ syncHandler := r .getSyncHandler (ctx , childCtx , out , endTrace )
11599 for _ , s := range r .changeSet .NeedsResync () {
116100 err := backoff .Retry (
117101 func () error {
118- return syncHandler (s )
102+ err := syncHandler (s )
103+ if err == nil || strings .Contains (err .Error (), "no such file or directory" ) {
104+ return nil
105+ }
106+
107+ return err
119108 }, backoff .WithContext (opts , childCtx ),
120109 )
121110
@@ -232,6 +221,32 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error {
232221 return nil
233222}
234223
224+ func (r * SkaffoldRunner ) getSyncHandler (
225+ ctx , childCtx context.Context ,
226+ out io.Writer ,
227+ endTrace func (options ... trace.SpanEndOption ),
228+ ) func (s * sync.Item ) error {
229+ return func (s * sync.Item ) error {
230+ fileCount := len (s .Copy ) + len (s .Delete )
231+ output .Default .Fprintf (out , "Syncing %d files for %s\n " , fileCount , s .Image )
232+ fileSyncInProgress (fileCount , s .Image )
233+
234+ if err := r .deployer .GetSyncer ().Sync (childCtx , out , s ); err != nil {
235+ log .Entry (ctx ).Warn ("Skipping deploy due to sync error:" , err )
236+ fileSyncFailed (fileCount , s .Image , err )
237+ event .DevLoopFailedInPhase (r .devIteration , constants .Sync , err )
238+ eventV2 .TaskFailed (constants .DevLoop , err )
239+ endTrace (instrumentation .TraceEndError (err ))
240+
241+ return err
242+ }
243+
244+ fileSyncSucceeded (fileCount , s .Image )
245+
246+ return nil
247+ }
248+ }
249+
235250// Dev watches for changes and runs the skaffold build, test and deploy
236251// config until interrupted by the user.
237252func (r * SkaffoldRunner ) Dev (ctx context.Context , out io.Writer , artifacts []* latest.Artifact ) error {
0 commit comments