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;
}