Skip to content

Commit

Permalink
Use go error wrapping for easier error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
vansante committed Jan 11, 2021
1 parent 1ee1dbd commit 69ba909
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 84 deletions.
20 changes: 10 additions & 10 deletions archiver.go
Expand Up @@ -281,39 +281,39 @@ func fileExists(name string) bool {
func mkdir(dirPath string, dirMode os.FileMode) error {
err := os.MkdirAll(dirPath, dirMode)
if err != nil {
return fmt.Errorf("%s: making directory: %v", dirPath, err)
return fmt.Errorf("%s: making directory: %w", dirPath, err)
}
return nil
}

func writeNewFile(fpath string, in io.Reader, fm os.FileMode) error {
err := os.MkdirAll(filepath.Dir(fpath), 0755)
if err != nil {
return fmt.Errorf("%s: making directory for file: %v", fpath, err)
return fmt.Errorf("%s: making directory for file: %w", fpath, err)
}

out, err := os.Create(fpath)
if err != nil {
return fmt.Errorf("%s: creating new file: %v", fpath, err)
return fmt.Errorf("%s: creating new file: %w", fpath, err)
}
defer out.Close()

err = out.Chmod(fm)
if err != nil && runtime.GOOS != "windows" {
return fmt.Errorf("%s: changing file mode: %v", fpath, err)
return fmt.Errorf("%s: changing file mode: %w", fpath, err)
}

_, err = io.Copy(out, in)
if err != nil {
return fmt.Errorf("%s: writing file: %v", fpath, err)
return fmt.Errorf("%s: writing file: %w", fpath, err)
}
return nil
}

func writeNewSymbolicLink(fpath string, target string) error {
err := os.MkdirAll(filepath.Dir(fpath), 0755)
if err != nil {
return fmt.Errorf("%s: making directory for file: %v", fpath, err)
return fmt.Errorf("%s: making directory for file: %w", fpath, err)
}

_, err = os.Lstat(fpath)
Expand All @@ -326,15 +326,15 @@ func writeNewSymbolicLink(fpath string, target string) error {

err = os.Symlink(target, fpath)
if err != nil {
return fmt.Errorf("%s: making symbolic link for: %v", fpath, err)
return fmt.Errorf("%s: making symbolic link for: %w", fpath, err)
}
return nil
}

func writeNewHardLink(fpath string, target string) error {
err := os.MkdirAll(filepath.Dir(fpath), 0755)
if err != nil {
return fmt.Errorf("%s: making directory for file: %v", fpath, err)
return fmt.Errorf("%s: making directory for file: %w", fpath, err)
}

_, err = os.Lstat(fpath)
Expand All @@ -347,7 +347,7 @@ func writeNewHardLink(fpath string, target string) error {

err = os.Link(target, fpath)
if err != nil {
return fmt.Errorf("%s: making hard link for: %v", fpath, err)
return fmt.Errorf("%s: making hard link for: %w", fpath, err)
}
return nil
}
Expand Down Expand Up @@ -489,7 +489,7 @@ func ByHeader(input io.ReadSeeker) (Unarchiver, error) {
for _, m := range matchers {
ok, err := m.Match(input)
if err != nil {
return nil, fmt.Errorf("matching on format %s: %v", m, err)
return nil, fmt.Errorf("matching on format %s: %w", m, err)
}
if ok {
matcher = m
Expand Down
32 changes: 16 additions & 16 deletions rar.go
Expand Up @@ -82,7 +82,7 @@ func (r *Rar) Unarchive(source, destination string) error {
if !fileExists(destination) && r.MkdirAll {
err := mkdir(destination, 0755)
if err != nil {
return fmt.Errorf("preparing destination: %v", err)
return fmt.Errorf("preparing destination: %w", err)
}
}

Expand All @@ -93,13 +93,13 @@ func (r *Rar) Unarchive(source, destination string) error {
var err error
destination, err = r.addTopLevelFolder(source, destination)
if err != nil {
return fmt.Errorf("scanning source archive: %v", err)
return fmt.Errorf("scanning source archive: %w", err)
}
}

err := r.OpenFile(source)
if err != nil {
return fmt.Errorf("opening rar archive for reading: %v", err)
return fmt.Errorf("opening rar archive for reading: %w", err)
}
defer r.Close()

Expand All @@ -113,7 +113,7 @@ func (r *Rar) Unarchive(source, destination string) error {
log.Printf("[ERROR] Reading file in rar archive: %v", err)
continue
}
return fmt.Errorf("reading file in rar archive: %v", err)
return fmt.Errorf("reading file in rar archive: %w", err)
}
}

Expand All @@ -127,13 +127,13 @@ func (r *Rar) Unarchive(source, destination string) error {
func (r *Rar) addTopLevelFolder(sourceArchive, destination string) (string, error) {
file, err := os.Open(sourceArchive)
if err != nil {
return "", fmt.Errorf("opening source archive: %v", err)
return "", fmt.Errorf("opening source archive: %w", err)
}
defer file.Close()

rc, err := rardecode.NewReader(file, r.Password)
if err != nil {
return "", fmt.Errorf("creating archive reader: %v", err)
return "", fmt.Errorf("creating archive reader: %w", err)
}

var files []string
Expand All @@ -143,7 +143,7 @@ func (r *Rar) addTopLevelFolder(sourceArchive, destination string) (string, erro
break
}
if err != nil {
return "", fmt.Errorf("scanning tarball's file listing: %v", err)
return "", fmt.Errorf("scanning tarball's file listing: %w", err)
}
files = append(files, hdr.Name)
}
Expand Down Expand Up @@ -201,12 +201,12 @@ func (r *Rar) unrarFile(f File, to string) error {
if fileExists("testdata") {
err := os.Chmod(to, hdr.Mode())
if err != nil {
return fmt.Errorf("changing dir mode: %v", err)
return fmt.Errorf("changing dir mode: %w", err)
}
} else {
err := mkdir(to, hdr.Mode())
if err != nil {
return fmt.Errorf("making directories: %v", err)
return fmt.Errorf("making directories: %w", err)
}
}
return nil
Expand All @@ -216,7 +216,7 @@ func (r *Rar) unrarFile(f File, to string) error {
// create their folders before writing the file
err := mkdir(filepath.Dir(to), 0755)
if err != nil {
return fmt.Errorf("making parent directories: %v", err)
return fmt.Errorf("making parent directories: %w", err)
}

if (hdr.Mode() & os.ModeSymlink) != 0 {
Expand Down Expand Up @@ -294,13 +294,13 @@ func (r *Rar) Close() error {
func (r *Rar) Walk(archive string, walkFn WalkFunc) error {
file, err := os.Open(archive)
if err != nil {
return fmt.Errorf("opening archive file: %v", err)
return fmt.Errorf("opening archive file: %w", err)
}
defer file.Close()

err = r.Open(file, 0)
if err != nil {
return fmt.Errorf("opening archive: %v", err)
return fmt.Errorf("opening archive: %w", err)
}
defer r.Close()

Expand All @@ -314,7 +314,7 @@ func (r *Rar) Walk(archive string, walkFn WalkFunc) error {
log.Printf("[ERROR] Opening next file: %v", err)
continue
}
return fmt.Errorf("opening next file: %v", err)
return fmt.Errorf("opening next file: %w", err)
}
err = walkFn(f)
if err != nil {
Expand All @@ -325,7 +325,7 @@ func (r *Rar) Walk(archive string, walkFn WalkFunc) error {
log.Printf("[ERROR] Walking %s: %v", f.Name(), err)
continue
}
return fmt.Errorf("walking %s: %v", f.Name(), err)
return fmt.Errorf("walking %s: %w", f.Name(), err)
}
}

Expand Down Expand Up @@ -364,13 +364,13 @@ func (r *Rar) Extract(source, target, destination string) error {
// build the filename we will extract to
end, err := filepath.Rel(targetDirPath, th.Name)
if err != nil {
return fmt.Errorf("relativizing paths: %v", err)
return fmt.Errorf("relativizing paths: %w", err)
}
joined := filepath.Join(destination, end)

err = r.unrarFile(f, joined)
if err != nil {
return fmt.Errorf("extracting file %s: %v", th.Name, err)
return fmt.Errorf("extracting file %s: %w", th.Name, err)
}

// if our target was not a directory, stop walk
Expand Down

0 comments on commit 69ba909

Please sign in to comment.