compressed := gzip.NewWriter(file)
archive := tar.NewWriter(compressed)
- err = filepath.WalkDir(root, func(path string, entry fs.DirEntry, walkErr error) error {
- if walkErr != nil {
- return fmt.Errorf("walk backup: %w", walkErr)
+ err = filepath.WalkDir(root, func(path string, entry fs.DirEntry, err error) error {
+ if err != nil {
+ return fmt.Errorf("walk backup: %w", err)
}
if ctx.Err() != nil {
return nil
}
- name, nameErr := filepath.Rel(root, path)
- if nameErr != nil {
- return fmt.Errorf("name archive entry: %w", nameErr)
+ name, err := filepath.Rel(root, path)
+ if err != nil {
+ return fmt.Errorf("name archive entry: %w", err)
}
- info, infoErr := entry.Info()
- if infoErr != nil {
- return fmt.Errorf("read backup entry: %w", infoErr)
+ info, err := entry.Info()
+ if err != nil {
+ return fmt.Errorf("read backup entry: %w", err)
}
if !info.IsDir() && !info.Mode().IsRegular() {
return fmt.Errorf("unsupported backup entry %q", name)
}
- header, headerErr := tar.FileInfoHeader(info, "")
- if headerErr != nil {
- return fmt.Errorf("make archive header: %w", headerErr)
+ header, err := tar.FileInfoHeader(info, "")
+ if err != nil {
+ return fmt.Errorf("make archive header: %w", err)
}
header.Name = filepath.ToSlash(name)
header.Uid, header.Gid = 0, 0
header.Uname, header.Gname = "", ""
- headerErr = archive.WriteHeader(header)
- if headerErr != nil {
- return fmt.Errorf("write archive header: %w", headerErr)
+ err = archive.WriteHeader(header)
+ if err != nil {
+ return fmt.Errorf("write archive header: %w", err)
}
if info.IsDir() {
return nil
}
- return backupCopyFile(ctx, archive, path, info.Size())
+ err = backupCopyFile(ctx, archive, path, info.Size())
+ if err != nil {
+ return fmt.Errorf("archive file: %w", err)
+ }
+
+ return nil
})
err = errors.Join(err, archive.Close(), compressed.Close())
if err != nil {
err = errors.Join(err, compressed.Close())
}()
- archive := tar.NewReader(BackupReader{ctx: ctx, reader: compressed})
+ archive := tar.NewReader(BackupReader{
+ ctx: ctx,
+ reader: compressed,
+ })
seen := make(map[string]bool)
var directories []*tar.Header
for {
- header, readErr := archive.Next()
- if errors.Is(readErr, io.EOF) {
+ var header *tar.Header
+
+ header, err = archive.Next()
+ if errors.Is(err, io.EOF) {
break
}
- if readErr != nil {
- return fmt.Errorf("read archive entry: %w", readErr)
+ if err != nil {
+ return fmt.Errorf("read archive entry: %w", err)
}
name := strings.TrimSuffix(header.Name, "/")
err = errors.Join(err, file.Close())
}()
- _, err = io.CopyN(out, BackupReader{ctx: ctx, reader: file}, size)
+ _, err = io.CopyN(out, BackupReader{
+ ctx: ctx,
+ reader: file,
+ }, size)
if err != nil {
return fmt.Errorf("copy backup file: %w", err)
}