Skip to content

Commit e408c55

Browse files
committed
iso9660 support for parallel writings
Signed-off-by: Avi Deitcher <[email protected]>
1 parent f92199d commit e408c55

File tree

2 files changed

+28
-24
lines changed

2 files changed

+28
-24
lines changed

filesystem/iso9660/finalize.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -908,27 +908,28 @@ func createPathTable(fi []*finalizeFileInfo) *pathTable {
908908
}
909909

910910
func walkTree(workspace string) ([]*finalizeFileInfo, map[string]*finalizeFileInfo, error) {
911-
cwd, err := os.Getwd()
912-
if err != nil {
913-
return nil, nil, fmt.Errorf("could not get pwd: %v", err)
914-
}
915-
// make everything relative to the workspace
916-
_ = os.Chdir(workspace)
917911
var (
918912
dirList = make(map[string]*finalizeFileInfo)
919913
fileList = make([]*finalizeFileInfo, 0)
920914
entry *finalizeFileInfo
921915
serial uint64
922916
)
923-
err = filepath.Walk(".", func(fp string, fi os.FileInfo, err error) error {
917+
err := filepath.WalkDir(workspace, func(actualPath string, d fs.DirEntry, err error) error {
924918
if err != nil {
925-
return fmt.Errorf("error walking path %s: %v", fp, err)
919+
return fmt.Errorf("error walking path %s: %v", actualPath, err)
920+
}
921+
fp := strings.TrimPrefix(actualPath, workspace)
922+
fp = strings.TrimPrefix(fp, string(filepath.Separator))
923+
if fp == "" {
924+
fp = "."
926925
}
927-
name := fi.Name()
926+
name := d.Name()
928927
_, extension := calculateShortnameExtension(name)
929928

930-
actualPath := path.Join(workspace, fp)
931-
929+
fi, err := d.Info()
930+
if err != nil {
931+
return fmt.Errorf("could not get file info for %s: %v", fp, err)
932+
}
932933
entry, err = finalizeFileInfoFromFile(fp, actualPath, fi)
933934
if err != nil {
934935
return err
@@ -960,8 +961,6 @@ func walkTree(workspace string) ([]*finalizeFileInfo, map[string]*finalizeFileIn
960961
if err != nil {
961962
return nil, nil, err
962963
}
963-
// reset the workspace
964-
_ = os.Chdir(cwd)
965964
return fileList, dirList, nil
966965
}
967966

filesystem/squashfs/finalize.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/binary"
55
"fmt"
66
"io"
7+
iofs "io/fs"
78
"os"
89
"path"
910
"path/filepath"
@@ -415,21 +416,24 @@ func finalizeFragment(buf []byte, to util.File, toOffset int64, c Compressor) (r
415416
// because the inode data is different.
416417
// The first entry in the return always will be the root
417418
func walkTree(workspace string) ([]*finalizeFileInfo, error) {
418-
cwd, err := os.Getwd()
419-
if err != nil {
420-
return nil, fmt.Errorf("could not get pwd: %v", err)
421-
}
422-
// make everything relative to the workspace
423-
_ = os.Chdir(workspace)
424419
dirMap := make(map[string]*finalizeFileInfo)
425420
fileList := make([]*finalizeFileInfo, 0)
426421
var entry *finalizeFileInfo
427-
_ = filepath.Walk(".", func(fp string, fi os.FileInfo, err error) error {
422+
err := filepath.WalkDir(workspace, func(actualPath string, d iofs.DirEntry, err error) error {
428423
if err != nil {
429424
return err
430425
}
426+
fp := strings.TrimPrefix(actualPath, workspace)
427+
fp = strings.TrimPrefix(fp, string(filepath.Separator))
428+
if fp == "" {
429+
fp = "."
430+
}
431431
isRoot := fp == "."
432-
name := fi.Name()
432+
name := d.Name()
433+
fi, err := d.Info()
434+
if err != nil {
435+
return fmt.Errorf("could not get file info for %s: %v", fp, err)
436+
}
433437
m := fi.Mode()
434438
var fType fileType
435439
switch {
@@ -448,7 +452,7 @@ func walkTree(workspace string) ([]*finalizeFileInfo, error) {
448452
default:
449453
fType = fileRegular
450454
}
451-
xattrNames, err := xattr.List(fp)
455+
xattrNames, err := xattr.List(actualPath)
452456
if err != nil {
453457
return fmt.Errorf("unable to list xattrs for %s: %v", fp, err)
454458
}
@@ -495,8 +499,9 @@ func walkTree(workspace string) ([]*finalizeFileInfo, error) {
495499
fileList = append(fileList, entry)
496500
return nil
497501
})
498-
// reset the workspace
499-
_ = os.Chdir(cwd)
502+
if err != nil {
503+
return nil, err
504+
}
500505

501506
return fileList, nil
502507
}

0 commit comments

Comments
 (0)