Skip to content

Commit 6451e5c

Browse files
committed
oci-image-tool: Cleanup partially-unpacked directories on failures
Signed-off-by: Lei Jitang <leijitang@huawei.com>
1 parent 55691e3 commit 6451e5c

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

image/manifest.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,22 @@ func (m *manifest) validate(w walker) error {
8787
return nil
8888
}
8989

90-
func (m *manifest) unpack(w walker, dest string) error {
90+
func (m *manifest) unpack(w walker, dest string) (retErr error) {
91+
// error out if the dest directory is not empty
92+
if s, err := ioutil.ReadDir(dest); err != nil && err != os.IsNotExist(err) || len(s) > 0 {
93+
if err != nil {
94+
return fmt.Errorf("failed to open %s: %v", dest, err)
95+
}
96+
return fmt.Errorf("%s is not empty", dest)
97+
}
98+
defer func() {
99+
// if we encounter error during unpacking
100+
// clean up partially-unpacked destination
101+
if retErr != nil {
102+
os.RemoveAll(dest)
103+
}
104+
}()
105+
91106
for _, d := range m.Layers {
92107
if d.MediaType != string(schema.MediaTypeImageConfig) {
93108
continue

0 commit comments

Comments
 (0)