MCPcopy Create free account
hub / github.com/devspace-sh/devspace / untarNext

Function untarNext

helper/server/tar.go:84–171  ·  view source on GitHub ↗
(tarReader *tar.Reader, options *UpstreamOptions)

Source from the content-addressed store, hash-verified

82}
83
84func untarNext(tarReader *tar.Reader, options *UpstreamOptions) (bool, error) {
85 header, err := tarReader.Next()
86 if err != nil {
87 if err != io.EOF {
88 return false, errors.Wrap(err, "tar reader next")
89 }
90
91 return false, nil
92 }
93
94 relativePath := getRelativeFromFullPath("/"+header.Name, "")
95 outFileName := path.Join(options.UploadPath, relativePath)
96 baseName := path.Dir(outFileName)
97
98 // Check if newer file is there and then don't override?
99 stat, _ := os.Stat(outFileName)
100
101 if err := createAllFolders(baseName, 0755, options); err != nil {
102 return false, err
103 }
104
105 if header.FileInfo().IsDir() {
106 if err := createAllFolders(outFileName, 0755, options); err != nil {
107 return false, err
108 }
109
110 return true, nil
111 }
112
113 // Create / Override file
114 outFile, err := os.Create(outFileName)
115 if err != nil {
116 // Try again after 5 seconds
117 time.Sleep(time.Second * 5)
118 outFile, err = os.Create(outFileName)
119 if err != nil {
120 return false, errors.Wrapf(err, "create %s", outFileName)
121 }
122 }
123
124 defer outFile.Close()
125
126 if _, err := io.Copy(outFile, tarReader); err != nil {
127 return false, errors.Wrapf(err, "io copy tar reader %s", outFileName)
128 }
129 if err := outFile.Close(); err != nil {
130 return false, errors.Wrapf(err, "out file close %s", outFileName)
131 }
132
133 // Set old permissions and owner and group
134 if stat != nil {
135 if options.OverridePermission {
136 // Set permissions
137 _ = os.Chmod(outFileName, header.FileInfo().Mode())
138 } else {
139 // Set old permissions correctly
140 _ = os.Chmod(outFileName, stat.Mode())
141 }

Callers 1

untarAllFunction · 0.85

Calls 10

createAllFoldersFunction · 0.85
NextMethod · 0.80
getRelativeFromFullPathFunction · 0.70
ChownFunction · 0.70
CloseMethod · 0.65
CopyMethod · 0.65
IsDirMethod · 0.45
ModeMethod · 0.45
ModTimeMethod · 0.45
ErrorfMethod · 0.45

Tested by

no test coverage detected