I've seen several posts about repository locking from the eGit side but haven't really seen any solutions.
I'm using jgit 2.1.0.201209190230-r.
The following code fails in windows because some .pack files remain locked until my VM closes. Any ideas what I'm doing wrong? Here is a test case going against a test github repository I have set up so you should be able to just copy and run.
Any ideas?
File tempDir = Files.createTempDirectory("temp_git_repo").toFile();
tempDir.mkdirs();
System.out.println("Clone Dir: " + tempDir.toString());
Git git = null;
try {
git = Git
.cloneRepository()
.setDirectory(tempDir).call();
} finally {
if(git != null) {
git.getRepository().close();
}
Files.walkFileTree(tempDir.toPath(),
new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir,
IOException e) throws IOException {
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
});
Files.delete(tempDir.toPath());
The error I see in windows is:
Exception in thread "main" java.nio.file.AccessDeniedException: C:\Users\YOUNGS~1\AppData\Local\Temp\temp_git_repo752040393604081653\.git\objects\pack\pack-1edb465f57d546b7c6343b02c151cb3bdd68ef87.idx
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:268)
at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
at java.nio.file.Files.delete(Files.java:1077)
at TestGitClone$1.visitFile(TestGitClone.java:33)
at TestGitClone$1.visitFile(TestGitClone.java:1)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:135)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:199)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:199)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:199)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:199)
at java.nio.file.FileTreeWalker.walk(FileTreeWalker.java:69)
at java.nio.file.Files.walkFileTree(Files.java:2591)
at java.nio.file.Files.walkFileTree(Files.java:2624)
at TestGitClone.main(TestGitClone.java:28)