From b3b42e96483caf3bda069e157719aab30cc38882 Mon Sep 17 00:00:00 2001 From: Michael Keppler Date: Fri, 23 Dec 2022 15:39:11 +0100 Subject: [PATCH 1/2] Normalize file separators before warning about equal archive entries Fixes #248. --- .../org/codehaus/plexus/archiver/AbstractUnArchiver.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java b/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java index 2fa207240..af58daff2 100644 --- a/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java @@ -426,7 +426,7 @@ protected boolean shouldExtractEntry( File targetDirectory, File targetFileName, "" ) + suffix; boolean fileOnDiskIsOlderThanEntry = targetFileName.lastModified() < entryDate.getTime(); - boolean differentCasing = !entryName.equals( relativeCanonicalDestPath ); + boolean differentCasing = !normalizedFileSeparator( entryName ).equals( normalizedFileSeparator( relativeCanonicalDestPath ) ); // Warn for case (4) and (5) if the file system is case-insensitive if ( differentCasing ) @@ -440,5 +440,8 @@ protected boolean shouldExtractEntry( File targetDirectory, File targetFileName, // Override the existing file if isOverwrite() is true or if the file on disk is older than the one in the archive return isOverwrite() || fileOnDiskIsOlderThanEntry; } - + + private String normalizedFileSeparator(String pathOrEntry) { + return pathOrEntry.replace("/", File.separator); + } } From d318de6fc2826c394835c1484c2ea7b05c2f68b0 Mon Sep 17 00:00:00 2001 From: Cedric Mailleux Date: Wed, 18 Aug 2021 15:31:44 -0400 Subject: [PATCH 2/2] Added unit test based on pr#180 Closes #180 --- .../plexus/archiver/AbstractUnArchiverTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/test/java/org/codehaus/plexus/archiver/AbstractUnArchiverTest.java b/src/test/java/org/codehaus/plexus/archiver/AbstractUnArchiverTest.java index b5bfef2f1..3e440887e 100644 --- a/src/test/java/org/codehaus/plexus/archiver/AbstractUnArchiverTest.java +++ b/src/test/java/org/codehaus/plexus/archiver/AbstractUnArchiverTest.java @@ -182,4 +182,21 @@ public void shouldNotWarnAboutDifferentCasingForDirectoryEntries( @TempDir File assertTrue( this.abstractUnArchiver.shouldExtractEntry( temporaryFolder, file, entryname, entryDate ) ); assertEquals( 0, this.abstractUnArchiver.casingMessageEmitted.get() ); } + + @Test + public void shouldExtractWhenCasingDifferOnlyInEntryNamePath( @TempDir File temporaryFolder) + throws IOException + { + // given + String entryName = "directory/whatever.txt"; + File file = new File( temporaryFolder, entryName ); // does not create the file! + file.mkdirs(); + file.createNewFile(); + Date entryDate = new Date(System.currentTimeMillis() + 5000); + + // when & then + abstractUnArchiver.setOverwrite( true ); + assertTrue( abstractUnArchiver.shouldExtractEntry( temporaryFolder, file, entryName, entryDate ) ); + assertEquals(0, abstractUnArchiver.casingMessageEmitted.get()); + } }