import static org.eclipse.jgit.util.FileUtils.RECURSIVE;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
}
public boolean canExecute(File f) {
- return true;
+ try {
+ return read(f).startsWith("binary:");
+ } catch (IOException e) {
+ return false;
+ }
}
@Override
Git git = Git.open(db.getDirectory(), executableFs);
String path = "a.txt";
+ String path2 = "a.sh";
writeTrashFile(path, "content");
- git.add().addFilepattern(path).call();
+ writeTrashFile(path2, "binary: content");
+ git.add().addFilepattern(path).addFilepattern(path2).call();
RevCommit commit1 = git.commit().setMessage("commit").call();
- TreeWalk walk = TreeWalk.forPath(db, path, commit1.getTree());
- assertNotNull(walk);
- assertEquals(FileMode.EXECUTABLE_FILE, walk.getFileMode(0));
-
- FS nonExecutableFs = new FS() {
-
- public boolean supportsExecute() {
- return false;
- }
-
- public boolean setExecute(File f, boolean canExec) {
- return false;
- }
-
- public ProcessBuilder runInShell(String cmd, String[] args) {
- return null;
- }
-
- public boolean retryFailedLockFileCommit() {
- return false;
- }
-
- public FS newInstance() {
- return this;
- }
-
- protected File discoverGitExe() {
- return null;
- }
-
- public boolean canExecute(File f) {
- return false;
- }
-
- @Override
- public boolean isCaseSensitive() {
- return false;
- }
- };
+ try (TreeWalk walk = new TreeWalk(db)) {
+ walk.addTree(commit1.getTree());
+ walk.next();
+ assertEquals(path2, walk.getPathString());
+ assertEquals(FileMode.EXECUTABLE_FILE, walk.getFileMode(0));
+ walk.next();
+ assertEquals(path, walk.getPathString());
+ assertEquals(FileMode.REGULAR_FILE, walk.getFileMode(0));
+ }
config = db.getConfig();
config.setBoolean(ConfigConstants.CONFIG_CORE_SECTION, null,
ConfigConstants.CONFIG_KEY_FILEMODE, false);
config.save();
- Git git2 = Git.open(db.getDirectory(), nonExecutableFs);
- writeTrashFile(path, "content2");
- git2.add().addFilepattern(path).call();
+ Git git2 = Git.open(db.getDirectory(), executableFs);
+ writeTrashFile(path2, "content2");
+ writeTrashFile(path, "binary: content2");
+ git2.add().addFilepattern(path).addFilepattern(path2).call();
RevCommit commit2 = git2.commit().setMessage("commit2").call();
- walk = TreeWalk.forPath(db, path, commit2.getTree());
- assertNotNull(walk);
- assertEquals(FileMode.EXECUTABLE_FILE, walk.getFileMode(0));
+ try (TreeWalk walk = new TreeWalk(db)) {
+ walk.addTree(commit2.getTree());
+ walk.next();
+ assertEquals(path2, walk.getPathString());
+ assertEquals(FileMode.EXECUTABLE_FILE, walk.getFileMode(0));
+ walk.next();
+ assertEquals(path, walk.getPathString());
+ assertEquals(FileMode.REGULAR_FILE, walk.getFileMode(0));
+ }
}
@Test