diff --git a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java index 2112a794c..f889e2282 100644 --- a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java +++ b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java @@ -5,7 +5,6 @@ import com.github.dockerjava.core.util.FilePathUtil; import com.github.dockerjava.core.GoLangFileMatch; import com.github.dockerjava.core.exception.GoLangFileMatchException; -import com.github.dockerjava.core.GoLangMatchFileFilter; import com.google.common.base.Function; import com.google.common.base.Objects; import com.google.common.base.Optional; @@ -21,9 +20,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.UUID; /** @@ -115,8 +112,6 @@ public class ScannedResult { final List ignores; - final Map environmentMap = new HashMap(); - final List filesToAdd = new ArrayList(); public InputStream buildDockerFolderTar() { @@ -162,7 +157,8 @@ public void close() throws IOException { @Override public String toString() { - return Objects.toStringHelper(this).add("ignores", ignores).add("environmentMap", environmentMap) + return Objects.toStringHelper(this) + .add("ignores", ignores) .add("filesToAdd", filesToAdd).toString(); } @@ -172,18 +168,17 @@ public ScannedResult() throws IOException { String matchingIgnorePattern = effectiveMatchingIgnorePattern(dockerFile); - if (matchingIgnorePattern == null) { - filesToAdd.add(dockerFile); - } else { + if (matchingIgnorePattern != null) { throw new DockerClientException(String.format( "Dockerfile is excluded by pattern '%s' in .dockerignore file", matchingIgnorePattern)); } - for (DockerfileStatement statement : getStatements()) { - if (statement instanceof DockerfileStatement.Env) { - processEnvStatement((DockerfileStatement.Env) statement); - } else if (statement instanceof DockerfileStatement.Add) { - processAddStatement((DockerfileStatement.Add) statement); + Collection filesInBuildContext = FileUtils.listFiles(getDockerFolder(), TrueFileFilter.INSTANCE, + TrueFileFilter.INSTANCE); + + for (File f : filesInBuildContext) { + if (effectiveMatchingIgnorePattern(f) == null) { + filesToAdd.add(f); } } } @@ -238,62 +233,5 @@ private String effectiveMatchingIgnorePattern(File file) { return lastMatchingPattern; } - - private void processAddStatement(DockerfileStatement.Add add) throws IOException { - - add = add.transform(environmentMap); - - for (String resource : add.getFileResources()) { - - File dockerFolder = getDockerFolder(); - - File src = new File(resource); - if (!src.isAbsolute()) { - src = new File(dockerFolder, resource); - } else { - throw new DockerClientException(String.format("Source file %s must be relative to %s", src, - dockerFolder)); - } - - if (src.exists()) { - src = src.getCanonicalFile(); - if (src.isDirectory()) { - Collection files = FileUtils.listFiles(src, new GoLangMatchFileFilter(src, ignores), - TrueFileFilter.INSTANCE); - filesToAdd.addAll(files); - } else if (effectiveMatchingIgnorePattern(src) == null) { - filesToAdd.add(src); - } else { - throw new DockerClientException(String.format( - "Source file %s is excluded by .dockerignore file", src)); - } - } else { - filesToAdd.addAll(resolveWildcards(src, ignores)); - } - } - } - - private Collection resolveWildcards(File file, List ignores) { - List filesToAdd = new ArrayList(); - - File parent = file.getParentFile(); - if (parent != null) { - if (parent.isDirectory()) { - Collection files = FileUtils.listFiles(parent, new GoLangMatchFileFilter(parent, ignores), - TrueFileFilter.INSTANCE); - filesToAdd.addAll(files); - } else { - filesToAdd.addAll(resolveWildcards(parent, ignores)); - } - } else { - throw new DockerClientException(String.format("Source file %s doesn't exist", file)); - } - - return filesToAdd; - } - - private void processEnvStatement(DockerfileStatement.Env env) { - environmentMap.put(env.variable, env.value); - } } } diff --git a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java index f8dc6a940..20e6b1935 100644 --- a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java +++ b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java @@ -100,6 +100,19 @@ public void testDockerBuilderFromTar() throws Exception { assertThat(response, containsString("Successfully executed testrun.sh")); } + @Test + public void testDockerBuildWithOnBuild() throws Exception { + File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddOnBuild/onbuild").getFile()); + dockerClient.buildImageCmd(baseDir) + .withNoCache(true) + .withTag("docker-java-onbuild") + .exec(new BuildImageResultCallback()) + .awaitImageId(); + baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddOnBuild/test").getFile()); + String response = dockerfileBuild(baseDir); + assertThat(response, containsString("Successfully executed testrun.sh")); + } + @Test public void testDockerBuilderAddUrl() throws Exception { File baseDir = new File(Thread.currentThread().getContextClassLoader().getResource("testAddUrl").getFile()); diff --git a/src/test/resources/testAddOnBuild/onbuild/Dockerfile b/src/test/resources/testAddOnBuild/onbuild/Dockerfile new file mode 100644 index 000000000..e482cd833 --- /dev/null +++ b/src/test/resources/testAddOnBuild/onbuild/Dockerfile @@ -0,0 +1,8 @@ +FROM ubuntu:latest + +# Copy testrun.sh files into the container + +ONBUILD ADD ./testrun.sh /tmp/ +ONBUILD RUN cp /tmp/testrun.sh /usr/local/bin/ && chmod +x /usr/local/bin/testrun.sh + +CMD ["testrun.sh"] diff --git a/src/test/resources/testAddOnBuild/test/Dockerfile b/src/test/resources/testAddOnBuild/test/Dockerfile new file mode 100644 index 000000000..533264d46 --- /dev/null +++ b/src/test/resources/testAddOnBuild/test/Dockerfile @@ -0,0 +1 @@ +FROM docker-java-onbuild diff --git a/src/test/resources/testAddOnBuild/test/testrun.sh b/src/test/resources/testAddOnBuild/test/testrun.sh new file mode 100755 index 000000000..80b468e71 --- /dev/null +++ b/src/test/resources/testAddOnBuild/test/testrun.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +echo "Successfully executed testrun.sh" diff --git a/src/test/resources/testDockerignore/.dockerignore b/src/test/resources/testDockerignore/.dockerignore index 63d8dbd40..bd3b31a85 100644 --- a/src/test/resources/testDockerignore/.dockerignore +++ b/src/test/resources/testDockerignore/.dockerignore @@ -1 +1 @@ -b \ No newline at end of file +*/b