Browse Source

Dynamically detect if Windows supports symbolic links

To get symlink support you typically need to run as administrator.

Change-Id: I394ea75bc2f250c62f860e537a0af9e6380b3b38
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
tags/v3.3.0.201402191814-rc1
Robin Rosenberg 10 years ago
parent
commit
50a19fcdef
1 changed files with 25 additions and 1 deletions
  1. 25
    1
      org.eclipse.jgit.java7/src/org/eclipse/jgit/util/FS_Win32_Java7.java

+ 25
- 1
org.eclipse.jgit.java7/src/org/eclipse/jgit/util/FS_Win32_Java7.java View File

@@ -51,6 +51,8 @@ import java.io.IOException;
*/
public class FS_Win32_Java7 extends FS_Win32 {

private volatile Boolean supportSymlinks;

FS_Win32_Java7(FS src) {
super(src);
}
@@ -65,7 +67,29 @@ public class FS_Win32_Java7 extends FS_Win32 {

@Override
public boolean supportsSymlinks() {
return true;
if (supportSymlinks == null)
detectSymlinkSupport();
return Boolean.TRUE.equals(supportSymlinks);
}

private void detectSymlinkSupport() {
File tempFile = null;
try {
tempFile = File.createTempFile("tempsymlinktarget", ""); //$NON-NLS-1$ //$NON-NLS-2$
File linkName = new File(tempFile.getParentFile(), "tempsymlink"); //$NON-NLS-1$
FileUtil.createSymLink(linkName, tempFile.getPath());
supportSymlinks = Boolean.TRUE;
linkName.delete();
} catch (IOException e) {
supportSymlinks = Boolean.FALSE;
} finally {
if (tempFile != null)
try {
FileUtils.delete(tempFile);
} catch (IOException e) {
throw new RuntimeException(e); // panic
}
}
}

@Override

Loading…
Cancel
Save