Skip to content

Commit 7f639ff

Browse files
committed
fix: avoid skipping symlinked directories during initial upload
Signed-off-by: Russell Centanni <[email protected]>
1 parent 94dadc3 commit 7f639ff

File tree

6 files changed

+19
-15
lines changed

6 files changed

+19
-15
lines changed

pkg/devspace/hook/download.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import (
66
"compress/gzip"
77
"context"
88
"fmt"
9-
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
109
"io"
1110
"os"
1211
"path"
1312
"path/filepath"
1413
"strings"
1514

15+
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
16+
1617
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
1718
"github.com/loft-sh/devspace/pkg/devspace/kubectl"
1819
"github.com/loft-sh/devspace/pkg/devspace/kubectl/selector"
@@ -146,7 +147,7 @@ func untarAll(reader io.Reader, destDir, prefix string, log logpkg.Logger) error
146147
continue
147148
}
148149

149-
if mode&os.ModeSymlink != 0 {
150+
if mode&os.ModeSymlink == os.ModeSymlink {
150151
if !symlinkWarningPrinted {
151152
symlinkWarningPrinted = true
152153
log.Warnf("warning: skipping symlink: %q -> %q\n", destFileName, header.Linkname)

pkg/devspace/hook/upload.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ import (
44
"archive/tar"
55
"compress/gzip"
66
"context"
7-
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
8-
"github.com/loft-sh/devspace/pkg/util/fsutil"
97
"io"
108
"os"
119
"path"
1210
"path/filepath"
1311

12+
devspacecontext "github.com/loft-sh/devspace/pkg/devspace/context"
13+
"github.com/loft-sh/devspace/pkg/util/fsutil"
14+
1415
"github.com/loft-sh/devspace/pkg/devspace/config/versions/latest"
1516
"github.com/loft-sh/devspace/pkg/devspace/kubectl"
1617
"github.com/loft-sh/devspace/pkg/devspace/kubectl/selector"
@@ -141,7 +142,7 @@ func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) e
141142
}
142143
}
143144
return nil
144-
} else if stat.Mode()&os.ModeSymlink != 0 {
145+
} else if stat.Mode()&os.ModeSymlink == os.ModeSymlink {
145146
//case soft link
146147
hdr, _ := tar.FileInfoHeader(stat, fpath)
147148
target, err := os.Readlink(fpath)

pkg/devspace/sync/evaluater.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package sync
22

33
import (
4+
"os"
5+
46
"github.com/loft-sh/devspace/helper/remote"
57
"github.com/loft-sh/devspace/pkg/util/log"
6-
"os"
78
)
89

910
// s.fileIndex needs to be locked before this function is called
@@ -132,7 +133,7 @@ func shouldRemoveLocal(absFilepath string, fileInformation *FileInformation, s *
132133
}
133134

134135
return false
135-
} else if stat.Mode()&os.ModeSymlink != 0 {
136+
} else if stat.Mode()&os.ModeSymlink == os.ModeSymlink {
136137
return true
137138
}
138139

pkg/devspace/sync/initial.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ func (i *initialSyncer) deltaState(remoteState map[string]*FileInformation, loca
236236
delete(remoteState, relativePath)
237237

238238
// should this directory be added?
239-
if !ignore && stat.Files == 0 {
239+
if !ignore && stat.Files != 0 {
240240
i.o.FileIndex.Lock()
241241
action := i.decide(stat, strategy)
242242
i.o.FileIndex.Unlock()
@@ -291,7 +291,7 @@ func (i *initialSyncer) CalculateLocalState(absPath string, localState map[strin
291291
if !ignore {
292292
// Retrieve the real stat instead of the symlink one
293293
lstat, err := os.Lstat(absPath)
294-
if err == nil && lstat.Mode()&os.ModeSymlink != 0 {
294+
if err == nil && lstat.Mode()&os.ModeSymlink == os.ModeSymlink {
295295
// Get real path
296296
targetPath, err := filepath.EvalSymlinks(absPath)
297297
if err != nil {
@@ -329,7 +329,7 @@ func (i *initialSyncer) CalculateLocalState(absPath string, localState map[strin
329329
Size: stat.Size(),
330330
Mode: stat.Mode(),
331331
IsDirectory: false,
332-
IsSymbolicLink: stat.Mode()&os.ModeSymlink != 0,
332+
IsSymbolicLink: stat.Mode()&os.ModeSymlink == os.ModeSymlink,
333333
ResolvedLink: isSymlink,
334334
}
335335
}
@@ -353,7 +353,7 @@ func (i *initialSyncer) calculateLocalDirState(absPath string, stat os.FileInfo,
353353
Size: stat.Size(),
354354
Mode: stat.Mode(),
355355
IsDirectory: true,
356-
IsSymbolicLink: stat.Mode()&os.ModeSymlink != 0,
356+
IsSymbolicLink: stat.Mode()&os.ModeSymlink == os.ModeSymlink,
357357
ResolvedLink: isSymlink,
358358
Files: len(files),
359359
}

pkg/devspace/sync/tar.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package sync
33
import (
44
"archive/tar"
55
"compress/gzip"
6-
"github.com/loft-sh/devspace/pkg/util/fsutil"
76
"io"
87
"os"
98
"path"
@@ -12,6 +11,8 @@ import (
1211
"strings"
1312
"time"
1413

14+
"github.com/loft-sh/devspace/pkg/util/fsutil"
15+
1516
"github.com/loft-sh/devspace/helper/server/ignoreparser"
1617

1718
"github.com/loft-sh/devspace/pkg/util/log"
@@ -376,7 +377,7 @@ func fillGo18FileTypeBits(mode int64, fi os.FileInfo) int64 {
376377
mode |= modeISREG
377378
case fi.IsDir():
378379
mode |= modeISDIR
379-
case fm&os.ModeSymlink != 0:
380+
case fm&os.ModeSymlink == os.ModeSymlink:
380381
mode |= modeISLNK
381382
case fm&os.ModeDevice != 0:
382383
if fm&os.ModeCharDevice != 0 {

pkg/devspace/sync/upstream.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ func (u *upstream) evaluateChange(relativePath, fullPath string) ([]*FileInforma
505505
// if File / Folder does not exist, we create a new remove change
506506
// Check if symbolic link
507507
lstat, err := os.Lstat(fullPath)
508-
if err == nil && lstat.Mode()&os.ModeSymlink != 0 {
508+
if err == nil && lstat.Mode()&os.ModeSymlink == os.ModeSymlink {
509509
_, symlinkExists := u.sync.upstream.symlinks[fullPath]
510510

511511
// Add symlink to map
@@ -539,7 +539,7 @@ func (u *upstream) evaluateChange(relativePath, fullPath string) ([]*FileInforma
539539
Size: stat.Size(),
540540
Mode: stat.Mode(),
541541
IsDirectory: stat.IsDir(),
542-
IsSymbolicLink: stat.Mode()&os.ModeSymlink != 0,
542+
IsSymbolicLink: stat.Mode()&os.ModeSymlink == os.ModeSymlink,
543543
}
544544

545545
// should we upload the file?

0 commit comments

Comments
 (0)