Author: maartenc Date: Thu Apr 3 15:19:46 2008 New Revision: 644532 URL: http://svn.apache.org/viewvc?rev=644532&view=rev Log: FIX: ivy:retrieve with sync="true" removes the .svn directory (IVY-763)
Modified: ant/ivy/core/trunk/CHANGES.txt ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngineSettings.java ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java ant/ivy/core/trunk/src/java/org/apache/ivy/util/FileUtil.java ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyRetrieveTest.java Modified: ant/ivy/core/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/CHANGES.txt?rev=644532&r1=644531&r2=644532&view=diff ============================================================================== --- ant/ivy/core/trunk/CHANGES.txt (original) +++ ant/ivy/core/trunk/CHANGES.txt Thu Apr 3 15:19:46 2008 @@ -77,6 +77,7 @@ - IMPROVEMENT: Change allownomd and skipbuildwithoutivy into a more semantically correct name (IVY-297) - IMPROVEMENT: Smarter determination if an expression is exact or not for RegexpPatternMatcher and GlobPatternMatcher +- FIX: ivy:retrieve with sync="true" removes the .svn directory (IVY-763) - FIX: Ivy silently fails XML errors in ivyrep (IVY-579) - FIX: Extra Attributes are not available to resolver after resolve if cache was empty (IVY-773) - FIX: NullPointerException during ResovleEngine.downloadArtifacts. (IVY-592) Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java?rev=644532&r1=644531&r2=644532&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngine.java Thu Apr 3 15:19:46 2008 @@ -150,9 +150,13 @@ if (options.isSync()) { Message.verbose("\tsyncing..."); - Collection existingArtifacts = FileUtil.listAll(fileRetrieveRoot); + + String[] ignorableFilenames = settings.getIgnorableFilenames(); + Collection ignoreList = Arrays.asList(ignorableFilenames); + + Collection existingArtifacts = FileUtil.listAll(fileRetrieveRoot, ignoreList); Collection existingIvys = ivyRetrieveRoot == null ? null : FileUtil - .listAll(ivyRetrieveRoot); + .listAll(ivyRetrieveRoot, ignoreList); if (fileRetrieveRoot.equals(ivyRetrieveRoot)) { Collection target = targetArtifactsStructure; Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngineSettings.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngineSettings.java?rev=644532&r1=644531&r2=644532&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngineSettings.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/retrieve/RetrieveEngineSettings.java Thu Apr 3 15:19:46 2008 @@ -25,5 +25,7 @@ boolean isCheckUpToDate(); IvyVariableContainer getVariables(); + + String[] getIgnorableFilenames(); } Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java?rev=644532&r1=644531&r2=644532&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/settings/IvySettings.java Thu Apr 3 15:19:46 2008 @@ -1073,6 +1073,14 @@ } /** + * Returns the file names of the files that should be ignored when + * creating a file listing. + */ + public String[] getIgnorableFilenames() { + return (String[]) listingIgnore.toArray(new String[listingIgnore.size()]); + } + + /** * Filters the names list by removing all names that should be ignored as defined by the listing * ignore list * @@ -1081,7 +1089,7 @@ public void filterIgnore(Collection names) { names.removeAll(listingIgnore); } - + public boolean isCheckUpToDate() { return checkUpToDate; } Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/util/FileUtil.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/util/FileUtil.java?rev=644532&r1=644531&r2=644532&view=diff ============================================================================== --- ant/ivy/core/trunk/src/java/org/apache/ivy/util/FileUtil.java (original) +++ ant/ivy/core/trunk/src/java/org/apache/ivy/util/FileUtil.java Thu Apr 3 15:19:46 2008 @@ -304,21 +304,26 @@ * * @param dir The directory from which all files, including files in subdirectory) * are extracted. + * @param ignore a Collection of filenames which must be excluded from listing * @return A collectoin containing all the files of the given directory and it's * subdirectories. */ - public static Collection listAll(File dir) { - return listAll(dir, new ArrayList()); + public static Collection listAll(File dir, Collection ignore) { + return listAll(dir, new ArrayList(), ignore); } - private static Collection listAll(File file, Collection list) { + private static Collection listAll(File file, Collection list, Collection ignore) { + if (ignore.contains(file.getName())) { + return list; + } + if (file.exists()) { list.add(file); } if (file.isDirectory()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { - listAll(files[i], list); + listAll(files[i], list, ignore); } } return list; Modified: ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyRetrieveTest.java URL: http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyRetrieveTest.java?rev=644532&r1=644531&r2=644532&view=diff ============================================================================== --- ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyRetrieveTest.java (original) +++ ant/ivy/core/trunk/test/java/org/apache/ivy/ant/IvyRetrieveTest.java Thu Apr 3 15:19:46 2008 @@ -142,6 +142,19 @@ assertFalse(new File("build/test/lib/unknown").exists()); // even conf directory should // have been deleted } + + public void testSyncWithIgnoreList() throws Exception { + project.setProperty("ivy.dep.file", "test/repositories/1/org6/mod6.2/ivys/ivy-0.4.xml"); + retrieve.setSync(true); + + new File("build/test/lib/.svn").mkdirs(); + new File("build/test/lib/.svn/test.txt").createNewFile(); + assertTrue(new File("build/test/lib/.svn/test.txt").exists()); + + retrieve.execute(); + + assertTrue(new File("build/test/lib/.svn/test.txt").exists()); + } public void testWithAPreviousResolve() throws Exception { // first we do a resolve in another project