Author: bentmann Date: Wed Sep 3 11:30:43 2008 New Revision: 691718 URL: http://svn.apache.org/viewvc?rev=691718&view=rev Log: [MSHARED-57] FileSetManager.isSymlink() produces false negatives
o Fixed symlink detection as inspired by FileUtils.isSymlink() from Commons IO 2.0 Modified: maven/shared/trunk/file-management/src/main/java/org/apache/maven/shared/model/fileset/util/FileSetManager.java maven/shared/trunk/file-management/src/test/java/org/apache/maven/shared/model/fileset/util/FileSetUtilsTest.java Modified: maven/shared/trunk/file-management/src/main/java/org/apache/maven/shared/model/fileset/util/FileSetManager.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/file-management/src/main/java/org/apache/maven/shared/model/fileset/util/FileSetManager.java?rev=691718&r1=691717&r2=691718&view=diff ============================================================================== --- maven/shared/trunk/file-management/src/main/java/org/apache/maven/shared/model/fileset/util/FileSetManager.java (original) +++ maven/shared/trunk/file-management/src/main/java/org/apache/maven/shared/model/fileset/util/FileSetManager.java Wed Sep 3 11:30:43 2008 @@ -371,17 +371,25 @@ private boolean isSymlink( File file ) throws IOException { - File parent = file.getParentFile(); - File canonicalFile = file.getCanonicalFile(); - + File fileInCanonicalParent = null; + File parentDir = file.getParentFile(); + if ( parentDir == null ) + { + fileInCanonicalParent = file; + } + else + { + fileInCanonicalParent = new File( parentDir.getCanonicalPath(), file.getName() ); + } if ( messages != null && messages.isDebugEnabled() ) { - messages.addDebugMessage( "Checking for symlink:\nParent file's canonical path: " - + parent.getCanonicalPath() + "\nMy canonical path: " + canonicalFile.getPath() ).flush(); + messages.addDebugMessage( + "Checking for symlink:\nFile's canonical path: " + + fileInCanonicalParent.getCanonicalPath() + + "\nFile's absolute path with canonical parent: " + + fileInCanonicalParent.getPath() ).flush(); } - return parent != null - && ( !canonicalFile.getName().equals( file.getName() ) || !canonicalFile.getPath() - .startsWith( parent.getCanonicalPath() ) ); + return !fileInCanonicalParent.getCanonicalFile().equals( fileInCanonicalParent.getAbsoluteFile() ); } private Set findDeletablePaths( FileSet fileSet ) Modified: maven/shared/trunk/file-management/src/test/java/org/apache/maven/shared/model/fileset/util/FileSetUtilsTest.java URL: http://svn.apache.org/viewvc/maven/shared/trunk/file-management/src/test/java/org/apache/maven/shared/model/fileset/util/FileSetUtilsTest.java?rev=691718&r1=691717&r2=691718&view=diff ============================================================================== --- maven/shared/trunk/file-management/src/test/java/org/apache/maven/shared/model/fileset/util/FileSetUtilsTest.java (original) +++ maven/shared/trunk/file-management/src/test/java/org/apache/maven/shared/model/fileset/util/FileSetUtilsTest.java Wed Sep 3 11:30:43 2008 @@ -94,7 +94,7 @@ throws IOException, InterruptedException, CommandLineException { File directory = setupTestDirectory( "testIncludesDontFollowSymlinks" ); - File subdir = new File( directory, "linked-to-self" ); + File subdir = new File( directory, directory.getName() ); if ( !createSymlink( directory, subdir ) ) { @@ -124,7 +124,7 @@ throws IOException, InterruptedException, CommandLineException { File directory = setupTestDirectory( "testDeleteDontFollowSymlinks" ); - File subdir = new File( directory, "linked-to-self" ); + File subdir = new File( directory, directory.getName() ); if ( !createSymlink( directory, subdir ) ) { @@ -136,7 +136,7 @@ FileSet set = new FileSet(); set.setDirectory( directory.getPath() ); set.addInclude( "**/included.txt" ); - set.addInclude( "**/linked-to-self" ); + set.addInclude( "**/" + subdir.getName() ); set.setFollowSymlinks( false ); FileSetManager fileSetManager = new FileSetManager();