Allow detection of case insensitive file systems

Change-Id: I03f59d07bcc3338ef8d392cbd940799186ca03bd
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
index fd74098..ab2027c 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
@@ -631,6 +631,11 @@ protected File discoverGitPrefix() {
 			public boolean canExecute(File f) {
 				return true;
 			}
+
+			@Override
+			public boolean isCaseSensitive() {
+				return false;
+			}
 		};
 
 		Git git = Git.open(db.getDirectory(), executableFs);
@@ -671,6 +676,11 @@ protected File discoverGitPrefix() {
 			public boolean canExecute(File f) {
 				return false;
 			}
+
+			@Override
+			public boolean isCaseSensitive() {
+				return false;
+			}
 		};
 
 		config = db.getConfig();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java
index e558d61..20d62f5 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitCommandTest.java
@@ -109,6 +109,11 @@ protected File discoverGitPrefix() {
 			public boolean canExecute(File f) {
 				return true;
 			}
+
+			@Override
+			public boolean isCaseSensitive() {
+				return true;
+			}
 		};
 
 		Git git = Git.open(db.getDirectory(), executableFs);
@@ -149,6 +154,11 @@ protected File discoverGitPrefix() {
 			public boolean canExecute(File f) {
 				return false;
 			}
+
+			@Override
+			public boolean isCaseSensitive() {
+				return true;
+			}
 		};
 
 		config = db.getConfig();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
index 0dfa511..535d1cd 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS.java
@@ -136,6 +136,13 @@ protected FS(FS src) {
 	public abstract boolean supportsExecute();
 
 	/**
+	 * Is this file system case sensitive
+	 *
+	 * @return true if this implementation is case sensitive
+	 */
+	public abstract boolean isCaseSensitive();
+
+	/**
 	 * Determine if the file is executable (or not).
 	 * <p>
 	 * Not all platforms and JREs support executable flags on files. If the
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
index f04bb6f..36d3b94 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_POSIX.java
@@ -86,6 +86,14 @@ protected File discoverGitPrefix() {
 	}
 
 	@Override
+	public boolean isCaseSensitive() {
+		if (isMacOS())
+			return false;
+		else
+			return true;
+	}
+
+	@Override
 	public ProcessBuilder runInShell(String cmd, String[] args) {
 		List<String> argv = new ArrayList<String>(4 + args.length);
 		argv.add("sh");
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java
index 58f7fb4..3b67044 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FS_Win32.java
@@ -53,6 +53,7 @@
 import java.util.List;
 
 class FS_Win32 extends FS {
+
 	static boolean isWin32() {
 		final String osDotName = AccessController
 				.doPrivileged(new PrivilegedAction<String>() {
@@ -89,6 +90,11 @@ public boolean setExecute(final File f, final boolean canExec) {
 	}
 
 	@Override
+	public boolean isCaseSensitive() {
+		return false;
+	}
+
+	@Override
 	public boolean retryFailedLockFileCommit() {
 		return true;
 	}