Skip to content

Commit ed14ff8

Browse files
refactor: streamline error handling in ExtractTarGz and ExtractZip functions
This update simplifies the error handling in the ExtractTarGz and ExtractZip functions by removing redundant comments and consolidating error logging. The changes enhance code readability and maintain existing functionality while ensuring consistent error reporting. Unused symlink handling code has also been removed to clean up the implementation.
1 parent f8e9613 commit ed14ff8

File tree

1 file changed

+5
-150
lines changed

1 file changed

+5
-150
lines changed

utils/extract.go

Lines changed: 5 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ func ExtractTarGz(archive *os.File, targetDir string) error {
1919
Archival: archiver.Tar{},
2020
}
2121

22-
// Create target directory with proper permissions
2322
if err := os.MkdirAll(targetDir, constants.DefaultDirPerms); err != nil {
2423
logger.Error("Failed to create target directory", logrus.Fields{
2524
"directory": targetDir,
@@ -28,68 +27,34 @@ func ExtractTarGz(archive *os.File, targetDir string) error {
2827
return fmt.Errorf("failed to create target directory: %w", err)
2928
}
3029

31-
// Ensure target directory has proper permissions
3230
if err := os.Chmod(targetDir, constants.DefaultDirPerms); err != nil {
33-
logger.Error("Failed to set target directory permissions", logrus.Fields{
34-
"directory": targetDir,
35-
"error": err,
36-
})
3731
return fmt.Errorf("failed to set target directory permissions: %w", err)
3832
}
3933

40-
// Create a map to store symlinks for later creation
41-
symlinks := make(map[string]string)
42-
4334
handler := func(ctx context.Context, f archiver.File) error {
4435
path := filepath.Join(targetDir, f.NameInArchive)
4536

4637
switch f.IsDir() {
4738
case true:
48-
// Create directory with proper permissions
4939
if err := os.MkdirAll(path, constants.DefaultDirPerms); err != nil {
50-
logger.Error("Failed to create directory", logrus.Fields{
51-
"directory": path,
52-
"error": err,
53-
})
5440
return fmt.Errorf("failed to create directory %s: %w", path, err)
5541
}
56-
// Ensure directory has proper permissions
5742
if err := os.Chmod(path, constants.DefaultDirPerms); err != nil {
58-
logger.Error("Failed to set directory permissions", logrus.Fields{
59-
"directory": path,
60-
"error": err,
61-
})
6243
return fmt.Errorf("failed to set directory permissions for %s: %w", path, err)
6344
}
6445

6546
case false:
66-
// If it's a symlink, store it for later
67-
if f.LinkTarget != "" {
68-
symlinks[path] = f.LinkTarget
69-
return nil
70-
}
71-
72-
// Ensure parent directory exists with proper permissions
7347
parentDir := filepath.Dir(path)
7448
if err := os.MkdirAll(parentDir, constants.DefaultDirPerms); err != nil {
75-
logger.Error("Failed to create parent directory", logrus.Fields{
76-
"directory": parentDir,
77-
"error": err,
78-
})
7949
return fmt.Errorf("failed to create parent directory %s: %w", parentDir, err)
8050
}
8151
if err := os.Chmod(parentDir, constants.DefaultDirPerms); err != nil {
82-
logger.Error("Failed to set parent directory permissions", logrus.Fields{
83-
"directory": parentDir,
84-
"error": err,
85-
})
8652
return fmt.Errorf("failed to set parent directory permissions for %s: %w", parentDir, err)
8753
}
8854

89-
// Create file with proper permissions
9055
fileMode := os.FileMode(constants.DefaultFilePerms)
91-
if f.Mode()&0111 != 0 { // If the file is executable in the archive
92-
fileMode = os.FileMode(constants.DefaultDirPerms) // Set executable bits using DefaultDirPerms
56+
if f.Mode()&0111 != 0 {
57+
fileMode = os.FileMode(constants.DefaultDirPerms)
9358
}
9459
w, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fileMode)
9560
if err != nil {
@@ -113,12 +78,7 @@ func ExtractTarGz(archive *os.File, targetDir string) error {
11378
return fmt.Errorf("failed to copy file contents for %s: %w", path, err)
11479
}
11580

116-
// Ensure file has proper permissions
11781
if err := os.Chmod(path, fileMode); err != nil {
118-
logger.Error("Failed to set file permissions", logrus.Fields{
119-
"file": path,
120-
"error": err,
121-
})
12282
return fmt.Errorf("failed to set file permissions for %s: %w", path, err)
12383
}
12484
}
@@ -128,50 +88,17 @@ func ExtractTarGz(archive *os.File, targetDir string) error {
12888

12989
err := format.Extract(context.Background(), archive, nil, handler)
13090
if err != nil {
91+
logger.Error("Failed to extract archive", logrus.Fields{"error": err})
13192
return fmt.Errorf("failed to extract archive: %w", err)
13293
}
13394

134-
// Create symlinks after all files have been extracted
135-
for path, target := range symlinks {
136-
// Remove any existing file/symlink
137-
os.Remove(path)
138-
139-
// Ensure parent directory exists with proper permissions
140-
parentDir := filepath.Dir(path)
141-
if err := os.MkdirAll(parentDir, constants.DefaultDirPerms); err != nil {
142-
logger.Error("Failed to create symlink parent directory", logrus.Fields{
143-
"directory": parentDir,
144-
"error": err,
145-
})
146-
return fmt.Errorf("failed to create symlink parent directory %s: %w", parentDir, err)
147-
}
148-
if err := os.Chmod(parentDir, constants.DefaultDirPerms); err != nil {
149-
logger.Error("Failed to set symlink parent directory permissions", logrus.Fields{
150-
"directory": parentDir,
151-
"error": err,
152-
})
153-
return fmt.Errorf("failed to set symlink parent directory permissions for %s: %w", parentDir, err)
154-
}
155-
156-
// Create the symlink
157-
if err := os.Symlink(target, path); err != nil {
158-
logger.Error("Failed to create symlink", logrus.Fields{
159-
"path": path,
160-
"target": target,
161-
"error": err,
162-
})
163-
return fmt.Errorf("failed to create symlink %s -> %s: %w", path, target, err)
164-
}
165-
}
166-
16795
return nil
16896
}
16997

17098
// ExtractZip extracts a ZIP archive to the target directory
17199
func ExtractZip(zipPath string, targetDir string) error {
172100
format := archiver.Zip{}
173101

174-
// Create target directory with proper permissions
175102
if err := os.MkdirAll(targetDir, constants.DefaultDirPerms); err != nil {
176103
logger.Error("Failed to create target directory", logrus.Fields{
177104
"directory": targetDir,
@@ -180,12 +107,7 @@ func ExtractZip(zipPath string, targetDir string) error {
180107
return fmt.Errorf("failed to create target directory: %w", err)
181108
}
182109

183-
// Ensure target directory has proper permissions
184110
if err := os.Chmod(targetDir, constants.DefaultDirPerms); err != nil {
185-
logger.Error("Failed to set target directory permissions", logrus.Fields{
186-
"directory": targetDir,
187-
"error": err,
188-
})
189111
return fmt.Errorf("failed to set target directory permissions: %w", err)
190112
}
191113

@@ -194,79 +116,25 @@ func ExtractZip(zipPath string, targetDir string) error {
194116

195117
switch f.IsDir() {
196118
case true:
197-
// Create directory with proper permissions
198119
if err := os.MkdirAll(path, constants.DefaultDirPerms); err != nil {
199-
logger.Error("Failed to create directory", logrus.Fields{
200-
"directory": path,
201-
"error": err,
202-
})
203120
return fmt.Errorf("failed to create directory %s: %w", path, err)
204121
}
205-
// Ensure directory has proper permissions
206122
if err := os.Chmod(path, constants.DefaultDirPerms); err != nil {
207-
logger.Error("Failed to set directory permissions", logrus.Fields{
208-
"directory": path,
209-
"error": err,
210-
})
211123
return fmt.Errorf("failed to set directory permissions for %s: %w", path, err)
212124
}
213125

214126
case false:
215-
// If it's a symlink
216-
if f.LinkTarget != "" {
217-
// Remove any existing file/symlink
218-
os.Remove(path)
219-
220-
// Ensure parent directory exists with proper permissions
221-
parentDir := filepath.Dir(path)
222-
if err := os.MkdirAll(parentDir, constants.DefaultDirPerms); err != nil {
223-
logger.Error("Failed to create symlink parent directory", logrus.Fields{
224-
"directory": parentDir,
225-
"error": err,
226-
})
227-
return fmt.Errorf("failed to create symlink parent directory %s: %w", parentDir, err)
228-
}
229-
if err := os.Chmod(parentDir, constants.DefaultDirPerms); err != nil {
230-
logger.Error("Failed to set symlink parent directory permissions", logrus.Fields{
231-
"directory": parentDir,
232-
"error": err,
233-
})
234-
return fmt.Errorf("failed to set symlink parent directory permissions for %s: %w", parentDir, err)
235-
}
236-
237-
// Create the symlink
238-
if err := os.Symlink(f.LinkTarget, path); err != nil {
239-
logger.Error("Failed to create symlink", logrus.Fields{
240-
"path": path,
241-
"target": f.LinkTarget,
242-
"error": err,
243-
})
244-
return fmt.Errorf("failed to create symlink %s -> %s: %w", path, f.LinkTarget, err)
245-
}
246-
return nil
247-
}
248-
249-
// Ensure parent directory exists with proper permissions
250127
parentDir := filepath.Dir(path)
251128
if err := os.MkdirAll(parentDir, constants.DefaultDirPerms); err != nil {
252-
logger.Error("Failed to create parent directory", logrus.Fields{
253-
"directory": parentDir,
254-
"error": err,
255-
})
256129
return fmt.Errorf("failed to create parent directory %s: %w", parentDir, err)
257130
}
258131
if err := os.Chmod(parentDir, constants.DefaultDirPerms); err != nil {
259-
logger.Error("Failed to set parent directory permissions", logrus.Fields{
260-
"directory": parentDir,
261-
"error": err,
262-
})
263132
return fmt.Errorf("failed to set parent directory permissions for %s: %w", parentDir, err)
264133
}
265134

266-
// Create file with proper permissions
267135
fileMode := os.FileMode(constants.DefaultFilePerms)
268-
if f.Mode()&0111 != 0 { // If the file is executable in the archive
269-
fileMode = os.FileMode(constants.DefaultDirPerms) // Set executable bits using DefaultDirPerms
136+
if f.Mode()&0111 != 0 {
137+
fileMode = os.FileMode(constants.DefaultDirPerms)
270138
}
271139
w, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, fileMode)
272140
if err != nil {
@@ -280,30 +148,17 @@ func ExtractZip(zipPath string, targetDir string) error {
280148
stream, err := f.Open()
281149
if err != nil {
282150
w.Close()
283-
logger.Error("Failed to open file stream", logrus.Fields{
284-
"file": path,
285-
"error": err,
286-
})
287151
return fmt.Errorf("failed to open file stream for %s: %w", path, err)
288152
}
289153

290154
_, err = io.Copy(w, stream)
291155
stream.Close()
292156
w.Close()
293157
if err != nil {
294-
logger.Error("Failed to copy file contents", logrus.Fields{
295-
"file": path,
296-
"error": err,
297-
})
298158
return fmt.Errorf("failed to copy file contents for %s: %w", path, err)
299159
}
300160

301-
// Ensure file has proper permissions
302161
if err := os.Chmod(path, fileMode); err != nil {
303-
logger.Error("Failed to set file permissions", logrus.Fields{
304-
"file": path,
305-
"error": err,
306-
})
307162
return fmt.Errorf("failed to set file permissions for %s: %w", path, err)
308163
}
309164
}

0 commit comments

Comments
 (0)