Skip to content

Commit f6061b4

Browse files
authored
Merge pull request #5566 from dmcgowan/cleanup-diff-walking
Revert diff/walking error change
2 parents fd2ca8d + 69f43d4 commit f6061b4

1 file changed

Lines changed: 20 additions & 15 deletions

File tree

diff/walking/differ.go

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
8080

8181
var ocidesc ocispec.Descriptor
8282
if err := mount.WithTempMount(ctx, lower, func(lowerRoot string) error {
83-
return mount.WithTempMount(ctx, upper, func(upperRoot string) (retErr error) {
83+
return mount.WithTempMount(ctx, upper, func(upperRoot string) error {
8484
var newReference bool
8585
if config.Reference == "" {
8686
newReference = true
@@ -95,8 +95,12 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
9595
if err != nil {
9696
return errors.Wrap(err, "failed to open writer")
9797
}
98+
99+
// errOpen is set when an error occurs while the content writer has not been
100+
// committed or closed yet to force a cleanup
101+
var errOpen error
98102
defer func() {
99-
if retErr != nil {
103+
if errOpen != nil {
100104
cw.Close()
101105
if newReference {
102106
if abortErr := s.store.Abort(ctx, config.Reference); abortErr != nil {
@@ -106,31 +110,31 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
106110
}
107111
}()
108112
if !newReference {
109-
if err = cw.Truncate(0); err != nil {
110-
return err
113+
if errOpen = cw.Truncate(0); errOpen != nil {
114+
return errOpen
111115
}
112116
}
113117

114118
if isCompressed {
115119
dgstr := digest.SHA256.Digester()
116120
var compressed io.WriteCloser
117-
compressed, err = compression.CompressStream(cw, compression.Gzip)
118-
if err != nil {
119-
return errors.Wrap(err, "failed to get compressed stream")
121+
compressed, errOpen = compression.CompressStream(cw, compression.Gzip)
122+
if errOpen != nil {
123+
return errors.Wrap(errOpen, "failed to get compressed stream")
120124
}
121-
err = archive.WriteDiff(ctx, io.MultiWriter(compressed, dgstr.Hash()), lowerRoot, upperRoot)
125+
errOpen = archive.WriteDiff(ctx, io.MultiWriter(compressed, dgstr.Hash()), lowerRoot, upperRoot)
122126
compressed.Close()
123-
if err != nil {
124-
return errors.Wrap(err, "failed to write compressed diff")
127+
if errOpen != nil {
128+
return errors.Wrap(errOpen, "failed to write compressed diff")
125129
}
126130

127131
if config.Labels == nil {
128132
config.Labels = map[string]string{}
129133
}
130134
config.Labels[uncompressed] = dgstr.Digest().String()
131135
} else {
132-
if err = archive.WriteDiff(ctx, cw, lowerRoot, upperRoot); err != nil {
133-
return errors.Wrap(err, "failed to write diff")
136+
if errOpen = archive.WriteDiff(ctx, cw, lowerRoot, upperRoot); errOpen != nil {
137+
return errors.Wrap(errOpen, "failed to write diff")
134138
}
135139
}
136140

@@ -140,10 +144,11 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o
140144
}
141145

142146
dgst := cw.Digest()
143-
if err := cw.Commit(ctx, 0, dgst, commitopts...); err != nil {
144-
if !errdefs.IsAlreadyExists(err) {
145-
return errors.Wrap(err, "failed to commit")
147+
if errOpen = cw.Commit(ctx, 0, dgst, commitopts...); errOpen != nil {
148+
if !errdefs.IsAlreadyExists(errOpen) {
149+
return errors.Wrap(errOpen, "failed to commit")
146150
}
151+
errOpen = nil
147152
}
148153

149154
info, err := s.store.Info(ctx, dgst)

0 commit comments

Comments
 (0)