Skip to content

Commit 19077cd

Browse files
committed
Add native classifier exception to version pattern
This pattern was stripping the native classifier from jars, e.g. ffmpeg-windows-x86 was appearing the same as ffmpeg.jar, where the prior contains platform-specific binaries and the latter contains the Java hooks. To facilitate this native bundle + hook distribution pattern, our version-stripping pattern now allows several platform classifiers to remain in a given file name.
1 parent 1d4e185 commit 19077cd

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

src/main/java/org/scijava/util/FileUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ public static void writeFile(final File file, final byte[] bytes)
173173
/** A regular expression to match filenames containing version information. */
174174
private final static Pattern versionPattern =
175175
Pattern
176-
.compile("(.+?)(-\\d+(\\.\\d+|\\d{7})+[a-z]?\\d?(-[A-Za-z0-9.]+?|\\.GA)*?)?((-(swing|swt|shaded|sources|javadoc|native))?(\\.jar(-[a-z]*)?))");
176+
.compile("(.+?)(-\\d+(\\.\\d+|\\d{7})+[a-z]?\\d?(-[A-Za-z0-9.]+?|\\.GA)*?)?((-(swing|swt|shaded|sources|javadoc|native|linux-x86_64|macosx-x86_64|windows-x86|windows-x86_64))?(\\.jar(-[a-z]*)?))");
177177

178178
public static String stripFilenameVersion(final String filename) {
179179
final Matcher matcher = versionPattern.matcher(filename);

src/test/java/org/scijava/util/FileUtilsTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import static org.junit.Assert.assertArrayEquals;
3535
import static org.junit.Assert.assertEquals;
3636
import static org.junit.Assert.assertNotNull;
37+
import static org.junit.Assert.assertNotEquals;
3738
import static org.junit.Assert.assertTrue;
3839
import static org.junit.Assert.fail;
3940
import static org.scijava.test.TestUtils.createTemporaryDirectory;
@@ -289,6 +290,12 @@ public void testStripVersionFromFilename() {
289290
assertEquals(FileUtils.stripFilenameVersion("jars/bsh.jar"), FileUtils.stripFilenameVersion("jars/bsh-2.0b4.jar"));
290291
assertEquals(FileUtils.stripFilenameVersion("jars/mpicbg.jar"), FileUtils.stripFilenameVersion("jars/mpicbg-20111128.jar"));
291292
assertEquals(FileUtils.stripFilenameVersion("jars/miglayout-swing.jar"), FileUtils.stripFilenameVersion("jars/miglayout-3.7.3.1-swing.jar"));
293+
294+
// Test that native binary .jars don't clash with their partner hook .jar
295+
assertNotEquals("jars/ffmpeg.jar", FileUtils.stripFilenameVersion("jars/ffmpeg-2.6.1-0.11-windows-x86.jar"));
296+
assertNotEquals("jars/ffmpeg.jar", FileUtils.stripFilenameVersion("jars/ffmpeg-2.6.1-0.11-windows-x86_64.jar"));
297+
assertNotEquals("jars/ffmpeg.jar", FileUtils.stripFilenameVersion("jars/ffmpeg-2.6.1-0.11-macosx-x86_64.jar"));
298+
assertNotEquals("jars/ffmpeg.jar", FileUtils.stripFilenameVersion("jars/ffmpeg-2.6.1-0.11-linux-x86_64.jar"));
292299
}
293300

294301
@Test

0 commit comments

Comments
 (0)