Skip to content

Commit 7b6fdd3

Browse files
authored
Merge pull request #14556 from iterate-ch/bugfix/MD-19137
Retain filename extension in temporary file.
2 parents 195bd70 + e3f762a commit 7b6fdd3

File tree

3 files changed

+30
-6
lines changed

3 files changed

+30
-6
lines changed

core/src/main/java/ch/cyberduck/core/local/FlatTemporaryFileService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public Local create(final Path file) {
4141
@Override
4242
public Local create(final String uid, final Path file) {
4343
final Local folder = LocalFactory.get(PreferencesFactory.get().getProperty("tmp.dir"), uid);
44-
return this.create(folder, String.format("%s-%d", file.getName(), file.attributes().hashCode()));
44+
return this.create(folder, String.format("%d-%s", file.attributes().hashCode(), file.getName()));
4545
}
4646

4747
/**

core/src/test/java/ch/cyberduck/core/local/DefaultTemporaryFileServiceTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,15 @@ public void testTemporaryPath() {
119119
assertEquals("f2", local.getParent().getParent().getName());
120120
assertEquals("f1", local.getParent().getParent().getParent().getName());
121121
}
122+
123+
@Test
124+
public void testTemporaryPathCustomPrefix() {
125+
final Path file = new Path("/f1/f2/t.txt", EnumSet.of(Path.Type.file));
126+
file.attributes().setDuplicate(true);
127+
file.attributes().setVersionId("1");
128+
final Local local = new DefaultTemporaryFileService().create("u", file);
129+
assertTrue(local.getParent().exists());
130+
assertEquals("t.txt", file.getName());
131+
assertEquals("t.txt", local.getName());
132+
}
122133
}

core/src/test/java/ch/cyberduck/core/local/FlatTemporaryFileServiceTest.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ public void testExists() {
5353
public void testCreateFile() {
5454
final String temp = StringUtils.removeEnd(System.getProperty("java.io.tmpdir"), File.separator);
5555
final String s = System.getProperty("file.separator");
56-
assertEquals(String.format("%s%su%sf-887503681", temp, s, s),
56+
assertEquals(String.format("%s%su%s887503681-f", temp, s, s),
5757
new FlatTemporaryFileService().create("u", new Path("/p/f", EnumSet.of(Path.Type.file))).getAbsolute());
5858
final Path file = new Path("/p/f", EnumSet.of(Path.Type.file));
5959
file.attributes().setRegion("region");
60-
assertEquals(String.format("%s%su%sf-887503681", temp, s, s),
60+
assertEquals(String.format("%s%su%s887503681-f", temp, s, s),
6161
new FlatTemporaryFileService().create("u", file).getAbsolute());
6262
}
6363

@@ -67,7 +67,7 @@ public void testCreateContainer() {
6767
final String s = System.getProperty("file.separator");
6868
final Path file = new Path("/container", EnumSet.of(Path.Type.directory));
6969
file.attributes().setRegion("region");
70-
assertEquals(String.format("%s%su%scontainer-887503681", temp, s, s),
70+
assertEquals(String.format("%s%su%s887503681-container", temp, s, s),
7171
new FlatTemporaryFileService().create("u", file).getAbsolute());
7272
}
7373

@@ -99,8 +99,8 @@ public void testPathNotTooLong() {
9999
final Local local = new FlatTemporaryFileService().create("UID", file);
100100
assertTrue(local.getParent().exists());
101101
final String localFile = local.getAbsolute();
102-
assertEquals(String.format("%s/%s/%s-887551731", temp, "UID", testPathFile).replace('/', File.separatorChar), localFile);
103-
assertNotEquals(String.format("%s/%s%s/2/%s-887551731", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile);
102+
assertEquals(String.format("%s/%s/887551731-%s", temp, "UID", testPathFile).replace('/', File.separatorChar), localFile);
103+
assertNotEquals(String.format("%s/%s%s/2/887551731-%s", temp, "UID", testPathMD5, testPathFile).replace('/', File.separatorChar), localFile);
104104
}
105105

106106
@Test
@@ -112,6 +112,19 @@ public void testTemporaryPath() {
112112
assertTrue(local.getParent().exists());
113113
assertEquals("t.txt", file.getName());
114114
assertNotEquals("t.txt", local.getName());
115+
assertTrue(local.getName().endsWith("-t.txt"));
115116
assertEquals(LocalFactory.get(PreferencesFactory.get().getProperty("tmp.dir")), LocalFactory.get(local.getParent().getAbsolute()));
116117
}
118+
119+
@Test
120+
public void testTemporaryPathCustomPrefix() {
121+
final Path file = new Path("/f1/f2/t.txt", EnumSet.of(Path.Type.file));
122+
file.attributes().setDuplicate(true);
123+
file.attributes().setVersionId("1");
124+
final Local local = new FlatTemporaryFileService().create("u", file);
125+
assertTrue(local.getParent().exists());
126+
assertEquals("t.txt", file.getName());
127+
assertTrue(local.getName().endsWith("-t.txt"));
128+
assertEquals(LocalFactory.get(PreferencesFactory.get().getProperty("tmp.dir"), "u"), LocalFactory.get(local.getParent().getAbsolute()));
129+
}
117130
}

0 commit comments

Comments
 (0)