BZ 62071 - fix error message when fileset.setFile is called twice
Project: http://git-wip-us.apache.org/repos/asf/ant/repo Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/a390fd65 Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/a390fd65 Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/a390fd65 Branch: refs/heads/1.9.x Commit: a390fd653ca45cb32cee7b25050ae70a4f1b55c9 Parents: 82573c4 Author: Stefan Bodewig <bode...@apache.org> Authored: Fri Feb 2 10:25:53 2018 +0100 Committer: Stefan Bodewig <bode...@apache.org> Committed: Fri Feb 2 10:25:53 2018 +0100 ---------------------------------------------------------------------- WHATSNEW | 5 +++++ .../apache/tools/ant/types/AbstractFileSet.java | 11 ++++++++++- .../tools/ant/types/AbstractFileSetTest.java | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ant/blob/a390fd65/WHATSNEW ---------------------------------------------------------------------- diff --git a/WHATSNEW b/WHATSNEW index 1430c8d..923f75a 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -30,6 +30,11 @@ Fixed bugs: streams of a process, could end up being truncated. Bugzilla Report 58833, 58451 + * <fileset>/<zipfileset>/<tarfileset> will now throw an exception + with a more useful error message when setFile is called twice on + the same instance. + Bugzilla Report 62071 + Other changes: -------------- http://git-wip-us.apache.org/repos/asf/ant/blob/a390fd65/src/main/org/apache/tools/ant/types/AbstractFileSet.java ---------------------------------------------------------------------- diff --git a/src/main/org/apache/tools/ant/types/AbstractFileSet.java b/src/main/org/apache/tools/ant/types/AbstractFileSet.java index 7d1ac4a..0c1d57d 100644 --- a/src/main/org/apache/tools/ant/types/AbstractFileSet.java +++ b/src/main/org/apache/tools/ant/types/AbstractFileSet.java @@ -232,7 +232,16 @@ public abstract class AbstractFileSet extends DataType if (isReference()) { throw tooManyAttributes(); } - if (getDir() != null) { + if (fileAttributeUsed) { + if (getDir().equals(file.getParentFile())) { + String[] includes = defaultPatterns.getIncludePatterns(getProject()); + if (includes.length == 1 && includes[0].equals(file.getName())) { + // NOOP, setFile has been invoked twice with the same parameter + return; + } + } + throw new BuildException("setFile cannot be called twice with different arguments"); + } else if (getDir() != null) { throw dirAndFileAreMutuallyExclusive(); } setDir(file.getParentFile()); http://git-wip-us.apache.org/repos/asf/ant/blob/a390fd65/src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java ---------------------------------------------------------------------- diff --git a/src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java b/src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java index 56ee498..a025b2b 100644 --- a/src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java +++ b/src/tests/junit/org/apache/tools/ant/types/AbstractFileSetTest.java @@ -244,4 +244,24 @@ public abstract class AbstractFileSetTest { File dir = f1.getDir(project); assertEquals("Dir is basedir", dir, project.getBaseDir()); } + + @Test + public void canCallSetFileTwiceWithSameArgument() { + AbstractFileSet f = getInstance(); + f.setFile(new File("/a")); + f.setFile(new File("/a")); + // really only asserts no exception is thrown + } + + @Test + public void cantCallSetFileTwiceWithDifferentArguments() { + AbstractFileSet f = getInstance(); + f.setFile(new File("/a")); + try { + f.setFile(new File("/b")); + fail("expected an exception"); + } catch (BuildException ex) { + assertEquals("setFile cannot be called twice with different arguments", ex.getMessage()); + } + } }