WorkTreeUpdater: Fix unclosed streams
1. A TemporaryBuffer.LocalFile must be destroyed to ensure the temporary file gets deleted on disk. 2. TemporaryBuffer.openInputStream() may be used only after TemporaryBuffer.close(). 3. The caller of DirCacheCheckout.getContent() is responsible for closing the OutputStream! Change-Id: I46abb0fba27656a1026858e5783fc60d4738a45e Signed-off-by: Thomas Wolf <twolf@apache.org>
This commit is contained in:
parent
1745131add
commit
134ee334fb
|
@ -554,22 +554,30 @@ public void updateFileWithContent(
|
|||
if (inCore) {
|
||||
return;
|
||||
}
|
||||
CheckoutMetadata checkoutMetadata = new CheckoutMetadata(streamType, smudgeCommand);
|
||||
CheckoutMetadata metadata = new CheckoutMetadata(streamType,
|
||||
smudgeCommand);
|
||||
if (safeWrite) {
|
||||
try (org.eclipse.jgit.util.TemporaryBuffer buffer =
|
||||
new org.eclipse.jgit.util.TemporaryBuffer.LocalFile(null)) {
|
||||
// Write to a buffer and copy to the file only if everything was fine.
|
||||
DirCacheCheckout.getContent(
|
||||
repo, path, checkoutMetadata, resultStreamLoader, null, buffer);
|
||||
InputStream bufIn = buffer.openInputStream();
|
||||
Files.copy(bufIn, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
|
||||
// Write to a buffer and copy to the file only if everything was
|
||||
// fine.
|
||||
TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null);
|
||||
try {
|
||||
try (TemporaryBuffer buf = buffer) {
|
||||
DirCacheCheckout.getContent(repo, path, metadata,
|
||||
resultStreamLoader, null, buf);
|
||||
}
|
||||
try (InputStream bufIn = buffer.openInputStream()) {
|
||||
Files.copy(bufIn, file.toPath(),
|
||||
StandardCopyOption.REPLACE_EXISTING);
|
||||
}
|
||||
} finally {
|
||||
buffer.destroy();
|
||||
}
|
||||
return;
|
||||
}
|
||||
OutputStream outputStream = new FileOutputStream(file);
|
||||
DirCacheCheckout.getContent(
|
||||
repo, path, checkoutMetadata, resultStreamLoader, null, outputStream);
|
||||
|
||||
try (OutputStream outputStream = new FileOutputStream(file)) {
|
||||
DirCacheCheckout.getContent(repo, path, metadata,
|
||||
resultStreamLoader, null, outputStream);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue