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>
stable-3.3
Robin Rosenberg 11 years ago committed by Matthias Sohn
parent
commit
50a19fcdef
  1. 26
      org.eclipse.jgit.java7/src/org/eclipse/jgit/util/FS_Win32_Java7.java

26
org.eclipse.jgit.java7/src/org/eclipse/jgit/util/FS_Win32_Java7.java

@ -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