Skip to content

Commit fc9468a

Browse files
committed
Try to fix hardlink failures.
1 parent b5f679d commit fc9468a

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

internal/unarchiver/unarchiver.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,20 @@ func writeNewHardLink(fpath string, target string) error {
133133
return fmt.Errorf("%s: making directory for file: %v", fpath, err)
134134
}
135135

136+
// The unarchiving process is unordered, and a hardlinked file's target may not yet exist.
137+
// Create it. writeNewFile() will overwrite it later, which is okay.
138+
if !fileExists(target) {
139+
err = os.MkdirAll(filepath.Dir(target), 0755)
140+
if err != nil {
141+
return fmt.Errorf("%s: making directory for file: %v", target, err)
142+
}
143+
f, err := os.Create(target)
144+
if err != nil {
145+
return fmt.Errorf("%s: creating target file: %v", target, err)
146+
}
147+
f.Close()
148+
}
149+
136150
err = os.Link(target, fpath)
137151
if err != nil {
138152
return fmt.Errorf("%s: making hard link for: %v", fpath, err)

0 commit comments

Comments
 (0)