8000 Support Dockerfile specific .dockerigore files · LarryNorth/docker-java@a527304 · GitHub
[go: up one dir, main page]

Skip to content

Commit a527304

Browse files
committed
Support Dockerfile specific .dockerigore files
1 parent 20f0831 commit a527304

File tree

17 files changed

+71
-1
lines changed

17 files changed

+71
-1
lines changed

docker-java-core/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public Iterable<DockerfileStatement> getStatements() throws IOException {
8585

8686
public List<String> getIgnores() throws IOException {
8787
List<String> ignores = new ArrayList<>();
88-
File dockerIgnoreFile = new File(baseDirectory, ".dockerignore");
88+
File dockerIgnoreFile = getDockerIgnoreFile();
8989
if (dockerIgnoreFile.exists()) {
9090
int lineNumber = 0;
9191
List<String> dockerIgnoreFileContent = FileUtils.readLines(dockerIgnoreFile);
@@ -107,6 +107,18 @@ public List<String> getIgnores() throws IOException {
107107
return ignores;
108108
}
109109

110+
private File getDockerIgnoreFile() {
111+
// See https://docs.docker.com/build/concepts/context/#filename-and-location
112+
File dockerFileDirectory = dockerFile.getParentFile();
113+
String dockerFileName = dockerFile.getName();
114+
File dockerFileSpecificIgnoreFile = new File(dockerFileDirectory, dockerFileName + ".dockerignore");
115+
if (dockerFileSpecificIgnoreFile.exists()) {
116+
return dockerFileSpecificIgnoreFile;
117+
} else {
118+
return new File(dockerFileDirectory, ".dockerignore");
119+
}
120+
}
121+
110122
public ScannedResult parse() throws IOException {
111123
return new ScannedResult();
112124
}

docker-java/src/test/java/com/github/dockerjava/core/dockerfile/DockerfileAddMultipleFilesTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,36 @@ public void ineffectiveIgnorePattern() throws Exception {
5757
assertThat(filesToAdd, containsInAnyOrder("Dockerfile", ".dockerignore", "README.md", "README-secret.md"));
5858
}
5959

60+
@Test
61+
public void specificDockerFileWithoutDockerFileSpecificIgnore() throws IOException {
62+
File baseDir = fileFromBuildTestResource("dockerignore/specificDockerFileWithoutDockerFileSpecificIgnore");
63+
Dockerfile dockerfile = new Dockerfile(new File(baseDir, "specific.Dockerfile"), baseDir);
64+
Dockerfile.ScannedResult result = dockerfile.parse();
65+
Collection<String> filesToAdd = transform(result.filesToAdd, TO_FILE_NAMES);
66+
67+
assertThat(filesToAdd, containsInAnyOrder("specific.Dockerfile", ".dockerignore", "README.md"));
68+
}
69+
70+
@Test
71+
public void defaultDockerFileWithDockerFileSpecificIgnore() throws IOException {
72+
File baseDir = fileFromBuildTestResource("dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore");
73+
Dockerfile dockerfile = new Dockerfile(new File(baseDir, "Dockerfile"), baseDir);
74+
Dockerfile.ScannedResult result = dockerfile.parse();
75+
Collection<String> filesToAdd = transform(result.filesToAdd, TO_FILE_NAMES);
76+
77+
assertThat(filesToAdd, containsInAnyOrder("Dockerfile", "Dockerfile.dockerignore", "README.md"));
78+
}
79+
80+
@Test
81+
public void dockerFileSpecificIgnoreOverridesDockerIgnore() throws IOException {
82+
File baseDir = fileFromBuildTestResource("dockerignore/DockerFileSpecificIgnoreOverridesDockerIgnore");
83+
Dockerfile dockerfile = new Dockerfile(new File(baseDir, "special.Dockerfile"), baseDir);
84+
Dockerfile.ScannedResult result = dockerfile.parse();
85+
Collection<String> filesToAdd = transform(result.filesToAdd, TO_FILE_NAMES);
86+
87+
assertThat(filesToAdd, containsInAnyOrder("special.Dockerfile", ".dockerignore", "special.Dockerfile.dockerignore", "README.md", "README-not-secret.md"));
88+
}
89+
6090
@Test
6191
public void addFiles() throws IOException {
6292
File baseDir = fileFromBuildTestResource("ADD/files");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM busybox:latest
2+
3+
CMD ["echo", "Success"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*.md
2+
!README*.md
3+
README-secret.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
No markdown files are included in the context except README files other than README-secret.md.

docker-java/src/test/resources/buildTests/dockerignore/DefaultDockerFileWithDockerFileSpecificIgnore/README.md

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*.md
2+
!README*.md
3+
README-not-secret.md
4+
README-secret.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
No markdown files are included in the context except README files other than README-secret.md.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
No markdown files are included in the context except README files other than README-secret.md.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
No markdown files are included in the context except README files other than README-secret.md.

0 commit comments

Comments
 (0)
0