From eacdd1b95157a4bf0ed617e934eb976cd29ca0f2 Mon Sep 17 00:00:00 2001 From: Harald Albers Date: Wed, 26 Nov 2014 17:58:39 +0100 Subject: [PATCH] Make GoLangMatchFileFilter work on Windows Without this, BuildImageCmdImplTest.testDockerBuilderAddFolder() and BuildImageCmdImplTest.testDockerIgnore() both fail with java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 3 D:\Eclipse\Jenkins\docker-java\target\test-classes\testDockerignore\a\ ^ at java.util.regex.Pattern.error(Pattern.java:1924) at java.util.regex.Pattern.escape(Pattern.java:2416) at java.util.regex.Pattern.atom(Pattern.java:2164) at java.util.regex.Pattern.sequence(Pattern.java:2097) at java.util.regex.Pattern.expr(Pattern.java:1964) at java.util.regex.Pattern.compile(Pattern.java:1665) at java.util.regex.Pattern.(Pattern.java:1337) at java.util.regex.Pattern.compile(Pattern.java:1022) at java.lang.String.replaceFirst(String.java:2119) at com.github.dockerjava.core.GoLangMatchFileFilter.accept(GoLangMatchFileFilter.java:26) at org.apache.commons.io.filefilter.AndFileFilter.accept(AndFileFilter.java:122) at org.apache.commons.io.filefilter.OrFileFilter.accept(OrFileFilter.java:118) at java.io.File.listFiles(File.java:1285) --- .../github/dockerjava/core/GoLangMatchFileFilter.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/dockerjava/core/GoLangMatchFileFilter.java b/src/main/java/com/github/dockerjava/core/GoLangMatchFileFilter.java index b0bb05c06..aa88287b4 100644 --- a/src/main/java/com/github/dockerjava/core/GoLangMatchFileFilter.java +++ b/src/main/java/com/github/dockerjava/core/GoLangMatchFileFilter.java @@ -3,6 +3,8 @@ */ package com.github.dockerjava.core; +import static org.apache.commons.lang.StringUtils.stripStart; + import java.io.File; import java.util.List; @@ -23,9 +25,10 @@ public GoLangMatchFileFilter(File base, List patterns) { @Override public boolean accept(File file) { - String relativePath = file.getAbsolutePath().replaceFirst(base.getAbsolutePath() + File.separatorChar, ""); - - boolean match = GoLangFileMatch.match(patterns, relativePath); + String basePath = base.getAbsolutePath() + File.separatorChar; + String relativePath = stripStart(file.getAbsolutePath(), basePath); + + boolean match = GoLangFileMatch.match(patterns, relativePath); return !match; }