From cea09edde39ed6315cf4f46ea0686cebacc3257d Mon Sep 17 00:00:00 2001 From: Nicolas Lalevee Date: Mon, 13 Aug 2012 20:56:52 +0000 Subject: [PATCH] merging IVY-1363,IVY-1359,IVY-1364: r1364410,1372594 git-svn-id: https://svn.apache.org/repos/asf/ant/ivy/core/branches/2.3.x@1372609 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 4 + .../apache/ivy/core/settings/IvySettings.java | 4 + .../parser/xml/XmlModuleDescriptorParser.java | 76 +-- .../bootstrap-parent/build.xml | 22 + .../bootstrap-parent/ivy.xml | 32 + .../croatia/build.xml | 22 + .../testAbsolutePathToParent/croatia/ivy.xml | 37 ++ .../germany/build.xml | 22 + .../testAbsolutePathToParent/germany/ivy.xml | 37 ++ .../ireland/build.xml | 22 + .../testAbsolutePathToParent/ireland/ivy.xml | 35 + .../master-parent/build.xml | 22 + .../master-parent/ivy.xml | 14 + .../testNoParents/bootstrap-parent/build.xml | 22 + .../testNoParents/bootstrap-parent/ivy.xml | 32 + .../testNoParents/croatia/build.xml | 22 + test/buildlists/testNoParents/croatia/ivy.xml | 34 + .../testNoParents/germany/build.xml | 22 + test/buildlists/testNoParents/germany/ivy.xml | 34 + .../testNoParents/ireland/build.xml | 22 + test/buildlists/testNoParents/ireland/ivy.xml | 32 + .../testNoParents/master-parent/build.xml | 22 + .../testNoParents/master-parent/ivy.xml | 34 + .../testOneParent/bootstrap-parent/build.xml | 22 + .../testOneParent/bootstrap-parent/ivy.xml | 32 + .../testOneParent/croatia/build.xml | 22 + test/buildlists/testOneParent/croatia/ivy.xml | 37 ++ .../testOneParent/germany/build.xml | 22 + test/buildlists/testOneParent/germany/ivy.xml | 37 ++ .../testOneParent/ireland/build.xml | 22 + test/buildlists/testOneParent/ireland/ivy.xml | 35 + .../testOneParent/master-parent/build.xml | 22 + .../testOneParent/master-parent/ivy.xml | 32 + .../bootstrap-parent/build.xml | 22 + .../bootstrap-parent/ivy.xml | 32 + .../croatia/build.xml | 22 + .../testRelativePathToParent/croatia/ivy.xml | 37 ++ .../germany/build.xml | 22 + .../testRelativePathToParent/germany/ivy.xml | 37 ++ .../ireland/build.xml | 22 + .../testRelativePathToParent/ireland/ivy.xml | 35 + .../master-parent/build.xml | 22 + .../master-parent/ivy.xml | 32 + .../testTwoParents/bootstrap-parent/build.xml | 22 + .../testTwoParents/bootstrap-parent/ivy.xml | 32 + .../testTwoParents/croatia/build.xml | 22 + .../buildlists/testTwoParents/croatia/ivy.xml | 37 ++ .../testTwoParents/germany/build.xml | 22 + .../buildlists/testTwoParents/germany/ivy.xml | 37 ++ .../testTwoParents/ireland/build.xml | 22 + .../buildlists/testTwoParents/ireland/ivy.xml | 37 ++ .../testTwoParents/master-parent/build.xml | 22 + .../testTwoParents/master-parent/ivy.xml | 32 + .../org/apache/ivy/ant/IvyBuildListTest.java | 602 +++++++----------- 54 files changed, 1663 insertions(+), 415 deletions(-) create mode 100644 test/buildlists/testAbsolutePathToParent/bootstrap-parent/build.xml create mode 100644 test/buildlists/testAbsolutePathToParent/bootstrap-parent/ivy.xml create mode 100644 test/buildlists/testAbsolutePathToParent/croatia/build.xml create mode 100644 test/buildlists/testAbsolutePathToParent/croatia/ivy.xml create mode 100644 test/buildlists/testAbsolutePathToParent/germany/build.xml create mode 100644 test/buildlists/testAbsolutePathToParent/germany/ivy.xml create mode 100644 test/buildlists/testAbsolutePathToParent/ireland/build.xml create mode 100644 test/buildlists/testAbsolutePathToParent/ireland/ivy.xml create mode 100644 test/buildlists/testAbsolutePathToParent/master-parent/build.xml create mode 100644 test/buildlists/testAbsolutePathToParent/master-parent/ivy.xml create mode 100644 test/buildlists/testNoParents/bootstrap-parent/build.xml create mode 100644 test/buildlists/testNoParents/bootstrap-parent/ivy.xml create mode 100644 test/buildlists/testNoParents/croatia/build.xml create mode 100644 test/buildlists/testNoParents/croatia/ivy.xml create mode 100644 test/buildlists/testNoParents/germany/build.xml create mode 100644 test/buildlists/testNoParents/germany/ivy.xml create mode 100644 test/buildlists/testNoParents/ireland/build.xml create mode 100644 test/buildlists/testNoParents/ireland/ivy.xml create mode 100644 test/buildlists/testNoParents/master-parent/build.xml create mode 100644 test/buildlists/testNoParents/master-parent/ivy.xml create mode 100644 test/buildlists/testOneParent/bootstrap-parent/build.xml create mode 100644 test/buildlists/testOneParent/bootstrap-parent/ivy.xml create mode 100644 test/buildlists/testOneParent/croatia/build.xml create mode 100644 test/buildlists/testOneParent/croatia/ivy.xml create mode 100644 test/buildlists/testOneParent/germany/build.xml create mode 100644 test/buildlists/testOneParent/germany/ivy.xml create mode 100644 test/buildlists/testOneParent/ireland/build.xml create mode 100644 test/buildlists/testOneParent/ireland/ivy.xml create mode 100644 test/buildlists/testOneParent/master-parent/build.xml create mode 100644 test/buildlists/testOneParent/master-parent/ivy.xml create mode 100644 test/buildlists/testRelativePathToParent/bootstrap-parent/build.xml create mode 100644 test/buildlists/testRelativePathToParent/bootstrap-parent/ivy.xml create mode 100644 test/buildlists/testRelativePathToParent/croatia/build.xml create mode 100644 test/buildlists/testRelativePathToParent/croatia/ivy.xml create mode 100644 test/buildlists/testRelativePathToParent/germany/build.xml create mode 100644 test/buildlists/testRelativePathToParent/germany/ivy.xml create mode 100644 test/buildlists/testRelativePathToParent/ireland/build.xml create mode 100644 test/buildlists/testRelativePathToParent/ireland/ivy.xml create mode 100644 test/buildlists/testRelativePathToParent/master-parent/build.xml create mode 100644 test/buildlists/testRelativePathToParent/master-parent/ivy.xml create mode 100644 test/buildlists/testTwoParents/bootstrap-parent/build.xml create mode 100644 test/buildlists/testTwoParents/bootstrap-parent/ivy.xml create mode 100644 test/buildlists/testTwoParents/croatia/build.xml create mode 100644 test/buildlists/testTwoParents/croatia/ivy.xml create mode 100644 test/buildlists/testTwoParents/germany/build.xml create mode 100644 test/buildlists/testTwoParents/germany/ivy.xml create mode 100644 test/buildlists/testTwoParents/ireland/build.xml create mode 100644 test/buildlists/testTwoParents/ireland/ivy.xml create mode 100644 test/buildlists/testTwoParents/master-parent/build.xml create mode 100644 test/buildlists/testTwoParents/master-parent/ivy.xml diff --git a/CHANGES.txt b/CHANGES.txt index 9685833d..27b6b222 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -46,6 +46,7 @@ for detailed view of each issue, please consult http://issues.apache.org/jira/br Benjamin Francisoud Jacob Grydholt Jensen John Gibson + Mitch Gitman Scott Goldstein Pierre Hägnestrand Scott Hebert @@ -129,6 +130,9 @@ for detailed view of each issue, please consult http://issues.apache.org/jira/br - FIX: NullPointerExeption in AbstractOSGiResolver (IVY-1343) (thanks to Thomas Kurpick) - FIX: Delivered ivy descriptor inconsistent with resolve report / retrieve and other post-resolve actions (IVY-1300) (thanks to Ed Burcher) - FIX: The Updatesite resolver is downloading Eclipse features instead of Eclipse bundle/plugin +- FIX: ivy:buildlist task confused by extends feature using two parents (IVY-1363) (thanks to Mitch Gitman and Jean-Louis Boudart) +- FIX: ivy.xml extends feature complains about Windows filesystem path (IVY-1359) (thanks to Mitch Gitman and Jean-Louis Boudart) +- FIX: buildlist task chokes on absolute path to parent Ivy module (IVY-1364) (thanks to Mitch Gitman and Jean-Louis Boudart) 2.3.0-rc1 ===================================== diff --git a/src/java/org/apache/ivy/core/settings/IvySettings.java b/src/java/org/apache/ivy/core/settings/IvySettings.java index 5b455e74..a1290533 100644 --- a/src/java/org/apache/ivy/core/settings/IvySettings.java +++ b/src/java/org/apache/ivy/core/settings/IvySettings.java @@ -875,6 +875,10 @@ public class IvySettings implements SortEngineSettings, PublishEngineSettings, P return getResolver(resolverName); } + public boolean hasResolver(String resolverName) { + return resolversMap.containsKey(resolverName); + } + public DependencyResolver getResolver(String resolverName) { if (dictatorResolver != null) { return dictatorResolver; diff --git a/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java b/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java index d69584f7..1e55cc17 100644 --- a/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java +++ b/src/java/org/apache/ivy/plugins/parser/xml/XmlModuleDescriptorParser.java @@ -230,30 +230,6 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { public Parser(ModuleDescriptorParser parser, ParserSettings ivySettings) { super(parser); settings = ivySettings; - configureModuleInheritanceRepository(); - } - /** - * Configure module inheritance repository (repository containning all path references - * to parent modules). Basicaly it checks if module inheritance repository exist - * in current ivy context, otherwise it will create one as a {@link URLResolver} - */ - protected void configureModuleInheritanceRepository() { - IvySettings ivysettings = IvyContext.getContext().getSettings(); - DependencyResolver parentModuleResolver=null; - //Does module-inheritance-repository exists ? - for (Iterator iterator = ivysettings.getResolvers().iterator(); iterator.hasNext();) { - DependencyResolver resolver = (DependencyResolver) iterator.next(); - if (resolver.getName().equals(MODULE_INHERITANCE_REPOSITORY)) { - parentModuleResolver=resolver; - break; - } - } - //if does not exist create one - if (parentModuleResolver == null) { - parentModuleResolver= new URLResolver(); - parentModuleResolver.setName(MODULE_INHERITANCE_REPOSITORY); - ivysettings.addResolver(parentModuleResolver); - } } public void setInput(InputStream descriptorInput) { @@ -428,13 +404,13 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { //check on filesystem based on location attribute (for dev ONLY) try { - checkParentModuleOnFilesystem(location); + checkParentModuleOnFilesystem(location, parentMrid); } catch (IOException e) { Message.warn("Unable to parse included ivy file " + location + ": " + e.getMessage()); } - // resolve parent from module inheritance repository + // Resolve parent module descriptor from module inheritance repository parent = resolveParentFromModuleInheritanceRepository(parentMrid); // if not found, tries to resolve using repositories @@ -616,22 +592,30 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { * Check if parent module is reachable using location attribute (for dev purpose). * If parent module is reachable it will be registered in module inheritance repository * @param location a given location + * @param parentMrid * @throws IOException * @throws ParseException */ - protected void checkParentModuleOnFilesystem(String location) throws IOException, ParseException { - URL url =getSettings().getRelativeUrlResolver().getURL(descriptorURL, location); - //is parent module reachable using location attribute ? - if (url.openConnection().getContentLength() >0 ) { - IvySettings ivysettings = IvyContext.getContext().getSettings(); - URLResolver urlResolver= (URLResolver) ivysettings.getResolver(MODULE_INHERITANCE_REPOSITORY); - if (urlResolver == null) { - throw new ParseException("Unable to find module inheritance repository", 0); - } - - if (!urlResolver.getIvyPatterns().contains(url.toExternalForm())) { - Message.debug("Registering parent module into module inheritance repository, parent module location is "+url.toExternalForm()); - urlResolver.addIvyPattern(url.toExternalForm()); + protected void checkParentModuleOnFilesystem(String location, ModuleRevisionId parentMrid) throws IOException, ParseException { + IvyContext ivyContext = IvyContext.getContext(); + File file = new File(location); + URL url = null; + if (file.isAbsolute()) { + url = getSettings().getRelativeUrlResolver().getURL(descriptorURL, + file.getAbsolutePath(), location); + } else { + url = getSettings().getRelativeUrlResolver().getURL(descriptorURL, location); + } + // Is parent module reachable using location attribute? + if (url.openConnection().getContentLength() > 0) { + String urlString = url.toExternalForm(); + if (!ivyContext.getSettings().hasResolver(getModuleInheritanceRepositoryParentResolverName(parentMrid))) { + Message.debug("Registering parent module into module inheritance repository map. Parent module location: " + urlString); + URLResolver parentModuleResolver = new URLResolver(); + parentModuleResolver.setName(getModuleInheritanceRepositoryParentResolverName(parentMrid)); + parentModuleResolver.addIvyPattern(url.toExternalForm()); + // Do we even need to be adding this resolver to the Ivy settings considering that it's being placed in the map and not being used elsewhere? + ivyContext.getSettings().addResolver(parentModuleResolver); } } } @@ -665,13 +649,13 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { } /** - * Resolve parent module from module inhertance repository + * Resolve parent module from module inheritance repository * @param parentMrid a given {@link ModuleRevisionId} to find * @return a {@link ModuleDescriptor} if found. Return null if no {@link ModuleDescriptor} was found * @throws ParseException */ protected ModuleDescriptor resolveParentFromModuleInheritanceRepository(ModuleRevisionId parentMrid) throws ParseException { - Message.debug("Trying to load included ivy file from module inheritance repository " ); + Message.debug("Trying to resolve included ivy file from module inheritance repository " ); DependencyDescriptor dd = new DefaultDependencyDescriptor(parentMrid, true); ResolveEngine engine = IvyContext.getContext().getIvy().getResolveEngine(); ResolveOptions options = new ResolveOptions(); @@ -679,7 +663,11 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { options.setDownload(false); ResolveData data = new ResolveData(engine, options); - DependencyResolver resolver = IvyContext.getContext().getSettings().getResolver(MODULE_INHERITANCE_REPOSITORY); + DependencyResolver resolver = IvyContext.getContext().getSettings().getResolver(getModuleInheritanceRepositoryParentResolverName(parentMrid)); + // The parent resolver will be null if its dev-only filesystem path hasn't been specified via the location attribute of the extends element. + if (resolver == null) { + return null; + } dd = NameSpaceHelper.toSystem(dd, getSettings().getContextNamespace()); ResolvedModuleRevision otherModule = resolver.getDependency(dd, data); if (otherModule != null) { @@ -688,6 +676,10 @@ public class XmlModuleDescriptorParser extends AbstractModuleDescriptorParser { return null; } } + + private static String getModuleInheritanceRepositoryParentResolverName(ModuleRevisionId parentMrid) { + return MODULE_INHERITANCE_REPOSITORY + "-" + parentMrid.toString(); + } protected void publicationsStarted(Attributes attributes) { state = State.PUB; diff --git a/test/buildlists/testAbsolutePathToParent/bootstrap-parent/build.xml b/test/buildlists/testAbsolutePathToParent/bootstrap-parent/build.xml new file mode 100644 index 00000000..c75a8177 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/bootstrap-parent/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testAbsolutePathToParent/bootstrap-parent/ivy.xml b/test/buildlists/testAbsolutePathToParent/bootstrap-parent/ivy.xml new file mode 100644 index 00000000..d5e02d58 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/bootstrap-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testAbsolutePathToParent/croatia/build.xml b/test/buildlists/testAbsolutePathToParent/croatia/build.xml new file mode 100644 index 00000000..34b1958a --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/croatia/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testAbsolutePathToParent/croatia/ivy.xml b/test/buildlists/testAbsolutePathToParent/croatia/ivy.xml new file mode 100644 index 00000000..fc5ea516 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/croatia/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testAbsolutePathToParent/germany/build.xml b/test/buildlists/testAbsolutePathToParent/germany/build.xml new file mode 100644 index 00000000..0c52ec10 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/germany/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testAbsolutePathToParent/germany/ivy.xml b/test/buildlists/testAbsolutePathToParent/germany/ivy.xml new file mode 100644 index 00000000..ea88dc8c --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/germany/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testAbsolutePathToParent/ireland/build.xml b/test/buildlists/testAbsolutePathToParent/ireland/build.xml new file mode 100644 index 00000000..be5f4ea0 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/ireland/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testAbsolutePathToParent/ireland/ivy.xml b/test/buildlists/testAbsolutePathToParent/ireland/ivy.xml new file mode 100644 index 00000000..5274d9c8 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/ireland/ivy.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testAbsolutePathToParent/master-parent/build.xml b/test/buildlists/testAbsolutePathToParent/master-parent/build.xml new file mode 100644 index 00000000..9b519541 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/master-parent/build.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/test/buildlists/testAbsolutePathToParent/master-parent/ivy.xml b/test/buildlists/testAbsolutePathToParent/master-parent/ivy.xml new file mode 100644 index 00000000..3f1a8578 --- /dev/null +++ b/test/buildlists/testAbsolutePathToParent/master-parent/ivy.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testNoParents/bootstrap-parent/build.xml b/test/buildlists/testNoParents/bootstrap-parent/build.xml new file mode 100644 index 00000000..c75a8177 --- /dev/null +++ b/test/buildlists/testNoParents/bootstrap-parent/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testNoParents/bootstrap-parent/ivy.xml b/test/buildlists/testNoParents/bootstrap-parent/ivy.xml new file mode 100644 index 00000000..d5e02d58 --- /dev/null +++ b/test/buildlists/testNoParents/bootstrap-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testNoParents/croatia/build.xml b/test/buildlists/testNoParents/croatia/build.xml new file mode 100644 index 00000000..34b1958a --- /dev/null +++ b/test/buildlists/testNoParents/croatia/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testNoParents/croatia/ivy.xml b/test/buildlists/testNoParents/croatia/ivy.xml new file mode 100644 index 00000000..85f5b1f3 --- /dev/null +++ b/test/buildlists/testNoParents/croatia/ivy.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testNoParents/germany/build.xml b/test/buildlists/testNoParents/germany/build.xml new file mode 100644 index 00000000..0c52ec10 --- /dev/null +++ b/test/buildlists/testNoParents/germany/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testNoParents/germany/ivy.xml b/test/buildlists/testNoParents/germany/ivy.xml new file mode 100644 index 00000000..b2fad5e8 --- /dev/null +++ b/test/buildlists/testNoParents/germany/ivy.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testNoParents/ireland/build.xml b/test/buildlists/testNoParents/ireland/build.xml new file mode 100644 index 00000000..be5f4ea0 --- /dev/null +++ b/test/buildlists/testNoParents/ireland/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testNoParents/ireland/ivy.xml b/test/buildlists/testNoParents/ireland/ivy.xml new file mode 100644 index 00000000..b0fd58b0 --- /dev/null +++ b/test/buildlists/testNoParents/ireland/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testNoParents/master-parent/build.xml b/test/buildlists/testNoParents/master-parent/build.xml new file mode 100644 index 00000000..9b519541 --- /dev/null +++ b/test/buildlists/testNoParents/master-parent/build.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/test/buildlists/testNoParents/master-parent/ivy.xml b/test/buildlists/testNoParents/master-parent/ivy.xml new file mode 100644 index 00000000..82dc4bba --- /dev/null +++ b/test/buildlists/testNoParents/master-parent/ivy.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testOneParent/bootstrap-parent/build.xml b/test/buildlists/testOneParent/bootstrap-parent/build.xml new file mode 100644 index 00000000..c75a8177 --- /dev/null +++ b/test/buildlists/testOneParent/bootstrap-parent/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testOneParent/bootstrap-parent/ivy.xml b/test/buildlists/testOneParent/bootstrap-parent/ivy.xml new file mode 100644 index 00000000..d5e02d58 --- /dev/null +++ b/test/buildlists/testOneParent/bootstrap-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testOneParent/croatia/build.xml b/test/buildlists/testOneParent/croatia/build.xml new file mode 100644 index 00000000..34b1958a --- /dev/null +++ b/test/buildlists/testOneParent/croatia/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testOneParent/croatia/ivy.xml b/test/buildlists/testOneParent/croatia/ivy.xml new file mode 100644 index 00000000..07f4a681 --- /dev/null +++ b/test/buildlists/testOneParent/croatia/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testOneParent/germany/build.xml b/test/buildlists/testOneParent/germany/build.xml new file mode 100644 index 00000000..0c52ec10 --- /dev/null +++ b/test/buildlists/testOneParent/germany/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testOneParent/germany/ivy.xml b/test/buildlists/testOneParent/germany/ivy.xml new file mode 100644 index 00000000..6af932eb --- /dev/null +++ b/test/buildlists/testOneParent/germany/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testOneParent/ireland/build.xml b/test/buildlists/testOneParent/ireland/build.xml new file mode 100644 index 00000000..be5f4ea0 --- /dev/null +++ b/test/buildlists/testOneParent/ireland/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testOneParent/ireland/ivy.xml b/test/buildlists/testOneParent/ireland/ivy.xml new file mode 100644 index 00000000..d376be66 --- /dev/null +++ b/test/buildlists/testOneParent/ireland/ivy.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testOneParent/master-parent/build.xml b/test/buildlists/testOneParent/master-parent/build.xml new file mode 100644 index 00000000..9b519541 --- /dev/null +++ b/test/buildlists/testOneParent/master-parent/build.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/test/buildlists/testOneParent/master-parent/ivy.xml b/test/buildlists/testOneParent/master-parent/ivy.xml new file mode 100644 index 00000000..0b663e2b --- /dev/null +++ b/test/buildlists/testOneParent/master-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testRelativePathToParent/bootstrap-parent/build.xml b/test/buildlists/testRelativePathToParent/bootstrap-parent/build.xml new file mode 100644 index 00000000..c75a8177 --- /dev/null +++ b/test/buildlists/testRelativePathToParent/bootstrap-parent/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testRelativePathToParent/bootstrap-parent/ivy.xml b/test/buildlists/testRelativePathToParent/bootstrap-parent/ivy.xml new file mode 100644 index 00000000..d5e02d58 --- /dev/null +++ b/test/buildlists/testRelativePathToParent/bootstrap-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testRelativePathToParent/croatia/build.xml b/test/buildlists/testRelativePathToParent/croatia/build.xml new file mode 100644 index 00000000..34b1958a --- /dev/null +++ b/test/buildlists/testRelativePathToParent/croatia/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testRelativePathToParent/croatia/ivy.xml b/test/buildlists/testRelativePathToParent/croatia/ivy.xml new file mode 100644 index 00000000..07f4a681 --- /dev/null +++ b/test/buildlists/testRelativePathToParent/croatia/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testRelativePathToParent/germany/build.xml b/test/buildlists/testRelativePathToParent/germany/build.xml new file mode 100644 index 00000000..0c52ec10 --- /dev/null +++ b/test/buildlists/testRelativePathToParent/germany/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testRelativePathToParent/germany/ivy.xml b/test/buildlists/testRelativePathToParent/germany/ivy.xml new file mode 100644 index 00000000..6af932eb --- /dev/null +++ b/test/buildlists/testRelativePathToParent/germany/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testRelativePathToParent/ireland/build.xml b/test/buildlists/testRelativePathToParent/ireland/build.xml new file mode 100644 index 00000000..be5f4ea0 --- /dev/null +++ b/test/buildlists/testRelativePathToParent/ireland/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testRelativePathToParent/ireland/ivy.xml b/test/buildlists/testRelativePathToParent/ireland/ivy.xml new file mode 100644 index 00000000..d376be66 --- /dev/null +++ b/test/buildlists/testRelativePathToParent/ireland/ivy.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testRelativePathToParent/master-parent/build.xml b/test/buildlists/testRelativePathToParent/master-parent/build.xml new file mode 100644 index 00000000..9b519541 --- /dev/null +++ b/test/buildlists/testRelativePathToParent/master-parent/build.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/test/buildlists/testRelativePathToParent/master-parent/ivy.xml b/test/buildlists/testRelativePathToParent/master-parent/ivy.xml new file mode 100644 index 00000000..0b663e2b --- /dev/null +++ b/test/buildlists/testRelativePathToParent/master-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testTwoParents/bootstrap-parent/build.xml b/test/buildlists/testTwoParents/bootstrap-parent/build.xml new file mode 100644 index 00000000..c75a8177 --- /dev/null +++ b/test/buildlists/testTwoParents/bootstrap-parent/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testTwoParents/bootstrap-parent/ivy.xml b/test/buildlists/testTwoParents/bootstrap-parent/ivy.xml new file mode 100644 index 00000000..d5e02d58 --- /dev/null +++ b/test/buildlists/testTwoParents/bootstrap-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testTwoParents/croatia/build.xml b/test/buildlists/testTwoParents/croatia/build.xml new file mode 100644 index 00000000..34b1958a --- /dev/null +++ b/test/buildlists/testTwoParents/croatia/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testTwoParents/croatia/ivy.xml b/test/buildlists/testTwoParents/croatia/ivy.xml new file mode 100644 index 00000000..07f4a681 --- /dev/null +++ b/test/buildlists/testTwoParents/croatia/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testTwoParents/germany/build.xml b/test/buildlists/testTwoParents/germany/build.xml new file mode 100644 index 00000000..0c52ec10 --- /dev/null +++ b/test/buildlists/testTwoParents/germany/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testTwoParents/germany/ivy.xml b/test/buildlists/testTwoParents/germany/ivy.xml new file mode 100644 index 00000000..4574ca43 --- /dev/null +++ b/test/buildlists/testTwoParents/germany/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testTwoParents/ireland/build.xml b/test/buildlists/testTwoParents/ireland/build.xml new file mode 100644 index 00000000..be5f4ea0 --- /dev/null +++ b/test/buildlists/testTwoParents/ireland/build.xml @@ -0,0 +1,22 @@ + + + + + diff --git a/test/buildlists/testTwoParents/ireland/ivy.xml b/test/buildlists/testTwoParents/ireland/ivy.xml new file mode 100644 index 00000000..beedfdb2 --- /dev/null +++ b/test/buildlists/testTwoParents/ireland/ivy.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/buildlists/testTwoParents/master-parent/build.xml b/test/buildlists/testTwoParents/master-parent/build.xml new file mode 100644 index 00000000..9b519541 --- /dev/null +++ b/test/buildlists/testTwoParents/master-parent/build.xml @@ -0,0 +1,22 @@ + + + + + \ No newline at end of file diff --git a/test/buildlists/testTwoParents/master-parent/ivy.xml b/test/buildlists/testTwoParents/master-parent/ivy.xml new file mode 100644 index 00000000..0b663e2b --- /dev/null +++ b/test/buildlists/testTwoParents/master-parent/ivy.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/java/org/apache/ivy/ant/IvyBuildListTest.java b/test/java/org/apache/ivy/ant/IvyBuildListTest.java index 81b91f5a..98a9f759 100644 --- a/test/java/org/apache/ivy/ant/IvyBuildListTest.java +++ b/test/java/org/apache/ivy/ant/IvyBuildListTest.java @@ -24,579 +24,435 @@ import java.util.List; import junit.framework.TestCase; +import org.apache.ivy.util.FileUtil; import org.apache.tools.ant.Project; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; +// CheckStyle:MagicNumber| OFF +// The test very often use MagicNumber. Using a constant is less expressive. + public class IvyBuildListTest extends TestCase { - /* - * Those tests use the ivy files A , B , C , D , E in test/buildlist - * The dependencies are : - * A -> C - * B has no dependency - * C -> B - * D -> A , B - * E has no dependency - * F -> G - * G -> F - */ + private File cache; - //CheckStyle:MagicNumber| OFF - //The test very often use MagicNumber. Using a constant is less expressive. + private Project project; - - public void testSimple() { - Project p = new Project(); + private IvyBuildList buildlist; - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); + protected void setUp() throws Exception { + createCache(); - FileSet fs = new FileSet(); - fs.setDir(new File("test/buildlist")); - fs.setIncludes("**/build.xml"); - fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); - buildlist.addFileset(fs); - buildlist.setOnMissingDescriptor("skip"); + project = new Project(); + project.init(); + + buildlist = new IvyBuildList(); + buildlist.setProject(project); + + System.setProperty("ivy.cache.dir", cache.getAbsolutePath()); + } + + protected void tearDown() throws Exception { + cleanCache(); + } + + private void cleanCache() { + FileUtil.forceDelete(cache); + } + + private void createCache() { + cache = new File("build/cache"); + cache.mkdirs(); + } + + private String[] getFiles(IvyBuildList buildlist) { buildlist.setReference("ordered.build.files"); - buildlist.execute(); - Object o = p.getReference("ordered.build.files"); + Object o = buildlist.getProject().getReference("ordered.build.files"); assertNotNull(o); assertTrue(o instanceof Path); Path path = (Path) o; String[] files = path.list(); assertNotNull(files); - + return files; + } + + private void assertListOfFiles(String prefix, String[] expected, String[] actual) { + for (int i = 0; i < expected.length; i++) { + assertEquals(new File(prefix + expected[i] + "/build.xml").getAbsolutePath(), new File( + actual[i]).getAbsolutePath()); + } + } + + /* + * Those tests use the ivy files A , B , C , D , E in test/buildlist The dependencies are : A -> + * C B has no dependency C -> B D -> A , B E has no dependency F -> G G -> F + */ + + public void testSimple() { + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlist")); + fs.setIncludes("**/build.xml"); + fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); + + buildlist.addFileset(fs); + buildlist.setOnMissingDescriptor("skip"); + + String[] files = getFiles(buildlist); + assertEquals(5, files.length); - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[3]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[4]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D", "E"}, files); } public void testReverse() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setReverse(true); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); + buildlist.addFileset(fs); + buildlist.setReverse(true); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("reverse.ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("reverse.ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - assertEquals(5, files.length); - assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[3]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[4]) - .getAbsolutePath()); - + assertListOfFiles("test/buildlist/", new String[] {"E", "D", "A", "C", "B"}, files); } public void testWithRoot() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setRoot("C"); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/**"); + buildlist.addFileset(fs); + buildlist.setRoot("C"); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); assertEquals(2, files.length); // A and D should be filtered out - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"B", "C"}, files); } public void testWithRootCircular() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setRoot("F"); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); + buildlist.addFileset(fs); + buildlist.setRoot("F"); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); assertEquals(2, files.length); // F and G should be in the list } public void testWithTwoRoots() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setRoot("C,E"); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/**"); + buildlist.addFileset(fs); + buildlist.setRoot("C,E"); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - assertEquals(3, files.length); // A and D should be filtered out - - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"B", "C", "E"}, files); } public void testWithRootExclude() { - Project p = new Project(); + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlist")); + fs.setIncludes("**/build.xml"); + fs.setExcludes("E2/**"); - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); + buildlist.addFileset(fs); buildlist.setRoot("C"); buildlist.setExcludeRoot(true); - - FileSet fs = new FileSet(); - fs.setDir(new File("test/buildlist")); - fs.setIncludes("**/build.xml"); - fs.setExcludes("E2/**"); - buildlist.addFileset(fs); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); assertEquals(1, files.length); // A, D and C should be filtered out - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"B"}, files); } - public void testWithRootAndOnlyDirectDep() { - Project p = new Project(); + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlist")); + fs.setIncludes("**/build.xml"); + fs.setExcludes("E2/**"); - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); + buildlist.addFileset(fs); buildlist.setRoot("A"); buildlist.setOnlydirectdep(true); - - FileSet fs = new FileSet(); - fs.setDir(new File("test/buildlist")); - fs.setIncludes("**/build.xml"); - fs.setExcludes("E2/**"); - buildlist.addFileset(fs); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); assertEquals(2, files.length); // We should have only A and C - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"C", "A"}, files); } - public void testWithLeaf() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setLeaf("C"); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/**"); + buildlist.addFileset(fs); + buildlist.setLeaf("C"); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - assertEquals(3, files.length); // B should be filtered out - - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"C", "A", "D"}, files); } public void testWithLeafCircular() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setLeaf("F"); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); + buildlist.addFileset(fs); + buildlist.setLeaf("F"); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - - assertEquals(2, files.length); + assertEquals(2, files.length); } public void testWithTwoLeafs() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setLeaf("C,E"); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/**"); + buildlist.addFileset(fs); + buildlist.setLeaf("C,E"); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - assertEquals(4, files.length); // B should be filtered out - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[3]) - .getAbsolutePath()); - + assertListOfFiles("test/buildlist/", new String[] {"C", "A", "D", "E"}, files); } public void testWithLeafExclude() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setLeaf("C"); - buildlist.setExcludeLeaf(true); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/**"); + buildlist.addFileset(fs); + buildlist.setLeaf("C"); + buildlist.setExcludeLeaf(true); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); assertEquals(2, files.length); // B and C should be filtered out - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"A", "D"}, files); } - public void testWithLeafAndOnlyDirectDep() { - Project p = new Project(); + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlist")); + fs.setIncludes("**/build.xml"); + fs.setExcludes("E2/**"); - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); + buildlist.addFileset(fs); + buildlist.setOnMissingDescriptor("skip"); buildlist.setLeaf("C"); buildlist.setOnlydirectdep(true); - FileSet fs = new FileSet(); - fs.setDir(new File("test/buildlist")); - fs.setIncludes("**/build.xml"); - fs.setExcludes("E2/**"); - buildlist.addFileset(fs); - buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); + String[] files = getFiles(buildlist); - buildlist.execute(); - - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); assertEquals(2, files.length); // We must have only A and C - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"C", "A"}, files); } - public void testRestartFrom() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - buildlist.setRestartFrom("C"); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); + buildlist.addFileset(fs); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); + buildlist.setRestartFrom("C"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - assertEquals(4, files.length); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[3]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"C", "A", "D", "E"}, files); } - + public void testOnMissingDescriptor() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); + buildlist.addFileset(fs); buildlist.setOnMissingDescriptor(new String("tail")); // IVY-805: new String instance - buildlist.setReference("ordered.build.files"); - buildlist.execute(); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); + String[] files = getFiles(buildlist); - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - assertEquals(6, files.length); - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[3]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[4]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/H/build.xml").getAbsolutePath(), new File(files[5]) - .getAbsolutePath()); - + assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D", "E", "H"}, files); + } + + public void testOnMissingDescriptor2() { + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlist")); + fs.setIncludes("**/build.xml"); + fs.setExcludes("E2/build.xml,F/build.xml,G/build.xml"); + + buildlist.addFileset(fs); buildlist.setOnMissingDescriptor(new String("skip")); // IVY-805: new String instance - buildlist.execute(); - o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); + String[] files = getFiles(buildlist); - path = (Path) o; - files = path.list(); - assertNotNull(files); - assertEquals(5, files.length); - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[3]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/E/build.xml").getAbsolutePath(), new File(files[4]) - .getAbsolutePath()); + assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D", "E"}, files); } public void testWithModuleWithSameNameAndDifferentOrg() { - Project p = new Project(); - - IvyBuildList buildlist = new IvyBuildList(); - buildlist.setProject(p); - FileSet fs = new FileSet(); fs.setDir(new File("test/buildlist")); fs.setIncludes("**/build.xml"); fs.setExcludes("F/build.xml,G/build.xml"); + buildlist.addFileset(fs); buildlist.setOnMissingDescriptor("skip"); - buildlist.setReference("ordered.build.files"); - buildlist.execute(); + String[] files = getFiles(buildlist); - Object o = p.getReference("ordered.build.files"); - assertNotNull(o); - assertTrue(o instanceof Path); - - Path path = (Path) o; - String[] files = path.list(); - assertNotNull(files); - assertEquals(6, files.length); - assertEquals(new File("test/buildlist/B/build.xml").getAbsolutePath(), new File(files[0]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/C/build.xml").getAbsolutePath(), new File(files[1]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/A/build.xml").getAbsolutePath(), new File(files[2]) - .getAbsolutePath()); - assertEquals(new File("test/buildlist/D/build.xml").getAbsolutePath(), new File(files[3]) - .getAbsolutePath()); - + assertListOfFiles("test/buildlist/", new String[] {"B", "C", "A", "D"}, files); + // the order of E and E2 is undefined List other = new ArrayList(); other.add(new File(files[4]).getAbsoluteFile().toURI()); other.add(new File(files[5]).getAbsoluteFile().toURI()); Collections.sort(other); - + assertEquals(new File("test/buildlist/E/build.xml").getAbsoluteFile().toURI(), other.get(0)); - assertEquals(new File("test/buildlist/E2/build.xml").getAbsoluteFile().toURI(), other.get(1)); + assertEquals(new File("test/buildlist/E2/build.xml").getAbsoluteFile().toURI(), + other.get(1)); } - + + public void testNoParents() { + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlists/testNoParents")); + fs.setIncludes("**/build.xml"); + + buildlist.addFileset(fs); + buildlist.setOnMissingDescriptor("skip"); + buildlist.setHaltonerror(false); + + String[] files = getFiles(buildlist); + + assertEquals(5, files.length); + + assertListOfFiles("test/buildlists/testNoParents/", new String[] {"bootstrap-parent", + "ireland", "germany", "master-parent", "croatia"}, files); + } + + public void testOneParent() { + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlists/testOneParent")); + fs.setIncludes("**/build.xml"); + + buildlist.addFileset(fs); + buildlist.setOnMissingDescriptor("skip"); + buildlist.setHaltonerror(false); + + String[] files = getFiles(buildlist); + + assertEquals(5, files.length); + + assertListOfFiles("test/buildlists/testOneParent/", new String[] {"bootstrap-parent", + "master-parent", "croatia", "ireland", "germany"}, files); + } + + public void testTwoParents() { + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlists/testTwoParents")); + fs.setIncludes("**/build.xml"); + + buildlist.addFileset(fs); + buildlist.setOnMissingDescriptor("skip"); + buildlist.setHaltonerror(false); + + String[] files = getFiles(buildlist); + + assertEquals(5, files.length); + + assertListOfFiles("test/buildlists/testTwoParents/", new String[] {"bootstrap-parent", + "master-parent", "croatia", "ireland", "germany"}, files); + } + + public void testRelativePathToParent() { + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlists/testRelativePathToParent")); + fs.setIncludes("**/build.xml"); + + buildlist.addFileset(fs); + buildlist.setOnMissingDescriptor("skip"); + buildlist.setHaltonerror(false); + + String[] files = getFiles(buildlist); + + assertEquals(5, files.length); + + assertListOfFiles("test/buildlists/testRelativePathToParent/", new String[] { + "bootstrap-parent", "master-parent", "croatia", "ireland", "germany"}, files); + } + + public void testAbsolutePathToParent() { + project.setProperty("master-parent.dir", new File("test/buildlists/testAbsolutePathToParent/master-parent").getAbsolutePath()); + + FileSet fs = new FileSet(); + fs.setDir(new File("test/buildlists/testAbsolutePathToParent")); + fs.setIncludes("**/build.xml"); + + buildlist.addFileset(fs); + buildlist.setOnMissingDescriptor("skip"); + buildlist.setHaltonerror(false); + + String[] files = getFiles(buildlist); + + assertEquals(5, files.length); + + assertListOfFiles("test/buildlists/testAbsolutePathToParent/", new String[] { + "bootstrap-parent", "master-parent", "croatia", "ireland", "germany"}, files); + } + } -//CheckStyle:MagicNumber| ON \ No newline at end of file +// CheckStyle:MagicNumber| ON \ No newline at end of file