|
12 | 12 | import org.apache.commons.io.FileUtils; |
13 | 13 | import org.apache.commons.io.FilenameUtils; |
14 | 14 | import org.apache.commons.io.IOUtils; |
15 | | -import org.apache.commons.io.filefilter.TrueFileFilter; |
16 | 15 |
|
17 | 16 | import com.github.dockerjava.api.exception.DockerClientException; |
18 | 17 | import com.github.dockerjava.core.GoLangFileMatch; |
@@ -186,16 +185,45 @@ public ScannedResult() throws IOException { |
186 | 185 | "Dockerfile is excluded by pattern '%s' in .dockerignore file", matchingIgnorePattern)); |
187 | 186 | } |
188 | 187 |
|
189 | | - Collection<File> filesInBuildContext = FileUtils.listFiles(baseDirectory, TrueFileFilter.INSTANCE, |
190 | | - TrueFileFilter.INSTANCE); |
| 188 | + addFilesInDirectory(baseDirectory); |
| 189 | + } |
191 | 190 |
|
192 | | - for (File f : filesInBuildContext) { |
193 | | - if (effectiveMatchingIgnorePattern(f) == null) { |
194 | | - filesToAdd.add(f); |
| 191 | + /** |
| 192 | + * Adds all files found in <code>directory</code> and subdirectories to |
| 193 | + * <code>filesToAdd</code> collection. It also adds any empty directories |
| 194 | + * if found. |
| 195 | + * |
| 196 | + * @param directory directory |
| 197 | + * @throws DockerClientException when IO error occurs |
| 198 | + */ |
| 199 | + private void addFilesInDirectory(File directory) { |
| 200 | + File[] files = directory.listFiles(); |
| 201 | + |
| 202 | + if (files == null) { |
| 203 | + throw new DockerClientException("Failed to read build context directory: " + baseDirectory.getAbsolutePath()); |
| 204 | + } |
| 205 | + |
| 206 | + if (files.length != 0) { |
| 207 | + for (File f : files) { |
| 208 | + if (effectiveMatchingIgnorePattern(f) == null) { |
| 209 | + if (f.isDirectory()) { |
| 210 | + addFilesInDirectory(f); |
| 211 | + } else { |
| 212 | + filesToAdd.add(f); |
| 213 | + } |
| 214 | + } |
195 | 215 | } |
| 216 | + // base directory should at least contains Dockerfile, but better check |
| 217 | + } else if (!isBaseDirectory(directory)) { |
| 218 | + // add empty directory |
| 219 | + filesToAdd.add(directory); |
196 | 220 | } |
197 | 221 | } |
198 | 222 |
|
| 223 | + private boolean isBaseDirectory(File directory) { |
| 224 | + return directory.compareTo(baseDirectory) == 0; |
| 225 | + } |
| 226 | + |
199 | 227 | /** |
200 | 228 | * Returns all matching ignore patterns for the given file name. |
201 | 229 | */ |
|
0 commit comments