X Tutup
Skip to content

Commit f0e78bd

Browse files
committed
Add support for deleting temporary temp files
DockerCmd<T> now extends java.io.Closeable. This allows us to cleanup the temporary tar file created when DockerClient.buildImageCmd(File) is invoked. Code would look like: BuildImageCmd cmd = dockerClient.buildCmd(myDir); try { // .. // cmd.exec(); // ... } finally { cmd.close(); }
1 parent f86abdb commit f0e78bd

File tree

3 files changed

+27
-6
lines changed

3 files changed

+27
-6
lines changed

src/main/java/com/github/dockerjava/api/command/DockerCmd.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.github.dockerjava.api.command;
22

3-
public interface DockerCmd<RES_T> {
3+
import java.io.Closeable;
4+
5+
public interface DockerCmd<RES_T> extends Closeable {
46

57
public RES_T exec();
68

src/main/java/com/github/dockerjava/core/command/AbstrDockerCmd.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.dockerjava.core.command;
22

3+
import java.io.IOException;
4+
35
import org.slf4j.Logger;
46
import org.slf4j.LoggerFactory;
57

@@ -25,4 +27,7 @@ public RES_T exec() throws DockerException {
2527
LOGGER.debug("Cmd: {}", this);
2628
return execution.exec((CMD_T)this);
2729
}
28-
}
30+
31+
@Override
32+
public void close() throws IOException {}
33+
}

src/main/java/com/github/dockerjava/core/command/BuildImageCmdImpl.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public class BuildImageCmdImpl extends AbstrDockerCmd<BuildImageCmd, InputStream
4040
.compile("^ENV\\s+(.*)\\s+(.*)$");
4141

4242
private InputStream tarInputStream = null;
43+
private File tarFile = null;
4344
private String tag;
4445
private boolean noCache;
4546
private boolean remove = true;
@@ -48,7 +49,13 @@ public class BuildImageCmdImpl extends AbstrDockerCmd<BuildImageCmd, InputStream
4849
public BuildImageCmdImpl(BuildImageCmd.Exec exec, File dockerFolder) {
4950
super(exec);
5051
Preconditions.checkNotNull(dockerFolder, "dockerFolder is null");
51-
withTarInputStream(buildDockerFolderTar(dockerFolder));
52+
tarFile = buildDockerFolderTar(dockerFolder);
53+
try {
54+
withTarInputStream(FileUtils.openInputStream(tarFile));
55+
} catch (IOException e) {
56+
// we just created the file this should never happen.
57+
throw new RuntimeException(e);
58+
}
5259
}
5360

5461
public BuildImageCmdImpl(BuildImageCmd.Exec exec, InputStream tarInputStream) {
@@ -129,6 +136,14 @@ public BuildImageCmdImpl withQuiet(boolean quiet) {
129136
return this;
130137
}
131138

139+
@Override
140+
public void close() throws IOException {
141+
super.close();
142+
if (tarFile != null) {
143+
FileUtils.deleteQuietly(tarFile);
144+
}
145+
}
146+
132147
@Override
133148
public String toString() {
134149
return new StringBuilder("build ")
@@ -139,7 +154,7 @@ public String toString() {
139154
.toString();
140155
}
141156

142-
protected InputStream buildDockerFolderTar(File dockerFolder) {
157+
protected File buildDockerFolderTar(File dockerFolder) {
143158
Preconditions.checkArgument(dockerFolder.exists(),
144159
"Path %s doesn't exist", dockerFolder);
145160
Preconditions.checkArgument(dockerFolder.isDirectory(),
@@ -255,9 +270,8 @@ protected InputStream buildDockerFolderTar(File dockerFolder) {
255270
}
256271
}
257272

258-
dockerFolderTar = CompressArchiveUtil.archiveTARFiles(dockerFolder,
273+
return CompressArchiveUtil.archiveTARFiles(dockerFolder,
259274
filesToAdd, archiveNameWithOutExtension);
260-
return FileUtils.openInputStream(dockerFolderTar);
261275
} catch (IOException ex) {
262276
FileUtils.deleteQuietly(dockerFolderTar);
263277
throw new DockerClientException(

0 commit comments

Comments
 (0)
X Tutup