MCPcopy Index your code
hub / github.com/devspace-sh/devspace / recursiveTar

Function recursiveTar

pkg/devspace/hook/upload.go:106–182  ·  view source on GitHub ↗
(srcBase, srcFile, destBase, destFile string, tw *tar.Writer)

Source from the content-addressed store, hash-verified

104}
105
106func recursiveTar(srcBase, srcFile, destBase, destFile string, tw *tar.Writer) error {
107 srcPath := path.Join(srcBase, srcFile)
108 matchedPaths, err := filepath.Glob(srcPath)
109 if err != nil {
110 return err
111 }
112 for _, fpath := range matchedPaths {
113 stat, err := os.Lstat(fpath)
114 if err != nil {
115 return err
116 }
117 if stat.IsDir() {
118 files, err := os.ReadDir(fpath)
119 if err != nil {
120 return err
121 }
122 if len(files) == 0 {
123 //case empty directory
124 hdr, _ := tar.FileInfoHeader(stat, fpath)
125 hdr.Name = destFile
126 if err := tw.WriteHeader(hdr); err != nil {
127 return err
128 }
129 }
130 for _, dirEntry := range files {
131 f, err := dirEntry.Info()
132 if err != nil {
133 continue
134 }
135 if fsutil.IsRecursiveSymlink(f, path.Join(fpath, f.Name())) {
136 continue
137 }
138
139 if err := recursiveTar(srcBase, path.Join(srcFile, f.Name()), destBase, path.Join(destFile, f.Name()), tw); err != nil {
140 return err
141 }
142 }
143 return nil
144 } else if stat.Mode()&os.ModeSymlink != 0 {
145 //case soft link
146 hdr, _ := tar.FileInfoHeader(stat, fpath)
147 target, err := os.Readlink(fpath)
148 if err != nil {
149 return err
150 }
151
152 hdr.Linkname = target
153 hdr.Name = destFile
154 if err := tw.WriteHeader(hdr); err != nil {
155 return err
156 }
157 } else {
158 //case regular file or other file type like pipe
159 hdr, err := tar.FileInfoHeader(stat, fpath)
160 if err != nil {
161 return err
162 }
163 hdr.Name = destFile

Callers 1

makeTarFunction · 0.70

Calls 7

IsRecursiveSymlinkFunction · 0.92
NameMethod · 0.65
CloseMethod · 0.65
CopyMethod · 0.65
IsDirMethod · 0.45
InfoMethod · 0.45
ModeMethod · 0.45

Tested by

no test coverage detected