List of usage examples for org.eclipse.jgit.lib RepositoryCache close
public static void close(@NonNull Repository db)
From source file:com.gitblit.manager.RepositoryManager.java
License:Apache License
/** * Ensure that a cached repository is completely closed and its resources * are properly released.//from w w w. ja v a 2s . c om * * @param repositoryName */ @Override public void close(String repositoryName) { Repository repository = getRepository(repositoryName); if (repository == null) { return; } RepositoryCache.close(repository); // assume 2 uses in case reflection fails int uses = 2; try { // The FileResolver caches repositories which is very useful // for performance until you want to delete a repository. // I have to use reflection to call close() the correct // number of times to ensure that the object and ref databases // are properly closed before I can delete the repository from // the filesystem. Field useCnt = Repository.class.getDeclaredField("useCnt"); useCnt.setAccessible(true); uses = ((AtomicInteger) useCnt.get(repository)).get(); } catch (Exception e) { logger.warn(MessageFormat.format("Failed to reflectively determine use count for repository {0}", repositoryName), e); } if (uses > 0) { logger.debug(MessageFormat.format( "{0}.useCnt={1}, calling close() {2} time(s) to close object and ref databases", repositoryName, uses, uses)); for (int i = 0; i < uses; i++) { repository.close(); } } // close any open index writer/searcher in the Lucene executor luceneExecutor.close(repositoryName); }
From source file:com.gitblit.tests.GitBlitSuite.java
License:Apache License
public static void close(Repository r) { RepositoryCache.close(r); // assume 2 uses in case reflection fails int uses = 2; try {//from w w w.j av a 2s . c o m Field useCnt = Repository.class.getDeclaredField("useCnt"); useCnt.setAccessible(true); uses = ((AtomicInteger) useCnt.get(r)).get(); } catch (Exception e) { e.printStackTrace(); } for (int i = 0; i < uses; i++) { r.close(); } }
From source file:com.gitblit.tests.JGitUtilsTest.java
License:Apache License
@Test public void testCreateRepository() throws Exception { String[] repositories = { "NewTestRepository.git", "NewTestRepository" }; for (String repositoryName : repositories) { Repository repository = JGitUtils.createRepository(GitBlitSuite.REPOSITORIES, repositoryName); File folder = FileKey.resolve(new File(GitBlitSuite.REPOSITORIES, repositoryName), FS.DETECTED); assertNotNull(repository);/* w ww . j av a 2 s . c o m*/ assertFalse(JGitUtils.hasCommits(repository)); assertNull(JGitUtils.getFirstCommit(repository, null)); assertEquals(folder.lastModified(), JGitUtils.getFirstChange(repository, null).getTime()); assertEquals(folder.lastModified(), JGitUtils.getLastChange(repository).when.getTime()); assertNull(JGitUtils.getCommit(repository, null)); repository.close(); RepositoryCache.close(repository); FileUtils.delete(repository.getDirectory(), FileUtils.RECURSIVE); } }
From source file:com.gitblit.tests.JGitUtilsTest.java
License:Apache License
@Test public void testCreateRepositoryShared() throws Exception { String[] repositories = { "NewSharedTestRepository.git" }; for (String repositoryName : repositories) { Repository repository = JGitUtils.createRepository(GitBlitSuite.REPOSITORIES, repositoryName, "group"); File folder = FileKey.resolve(new File(GitBlitSuite.REPOSITORIES, repositoryName), FS.DETECTED); assertNotNull(repository);/*ww w . ja v a2s.co m*/ assertFalse(JGitUtils.hasCommits(repository)); assertNull(JGitUtils.getFirstCommit(repository, null)); assertEquals("1", repository.getConfig().getString("core", null, "sharedRepository")); assertTrue(folder.exists()); if (!JnaUtils.isWindows()) { int mode = JnaUtils.getFilemode(folder); assertEquals(JnaUtils.S_ISGID, mode & JnaUtils.S_ISGID); assertEquals(JnaUtils.S_IRWXG, mode & JnaUtils.S_IRWXG); mode = JnaUtils.getFilemode(folder.getAbsolutePath() + "/HEAD"); assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP, mode & JnaUtils.S_IRWXG); mode = JnaUtils.getFilemode(folder.getAbsolutePath() + "/config"); assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP, mode & JnaUtils.S_IRWXG); } repository.close(); RepositoryCache.close(repository); FileUtils.delete(repository.getDirectory(), FileUtils.RECURSIVE); } }
From source file:com.gitblit.tests.JGitUtilsTest.java
License:Apache License
@Test public void testCreateRepositorySharedCustom() throws Exception { String[] repositories = { "NewSharedTestRepository.git" }; for (String repositoryName : repositories) { Repository repository = JGitUtils.createRepository(GitBlitSuite.REPOSITORIES, repositoryName, "660"); File folder = FileKey.resolve(new File(GitBlitSuite.REPOSITORIES, repositoryName), FS.DETECTED); assertNotNull(repository);// w w w.j a va2 s. co m assertFalse(JGitUtils.hasCommits(repository)); assertNull(JGitUtils.getFirstCommit(repository, null)); assertEquals("0660", repository.getConfig().getString("core", null, "sharedRepository")); assertTrue(folder.exists()); if (!JnaUtils.isWindows()) { int mode = JnaUtils.getFilemode(folder); assertEquals(JnaUtils.S_ISGID, mode & JnaUtils.S_ISGID); assertEquals(JnaUtils.S_IRWXG, mode & JnaUtils.S_IRWXG); assertEquals(0, mode & JnaUtils.S_IRWXO); mode = JnaUtils.getFilemode(folder.getAbsolutePath() + "/HEAD"); assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP, mode & JnaUtils.S_IRWXG); assertEquals(0, mode & JnaUtils.S_IRWXO); mode = JnaUtils.getFilemode(folder.getAbsolutePath() + "/config"); assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP, mode & JnaUtils.S_IRWXG); assertEquals(0, mode & JnaUtils.S_IRWXO); } repository.close(); RepositoryCache.close(repository); FileUtils.delete(repository.getDirectory(), FileUtils.RECURSIVE); } }
From source file:com.gitblit.tests.JGitUtilsTest.java
License:Apache License
@Test public void testCreateRepositorySharedSgidParent() throws Exception { if (!JnaUtils.isWindows()) { String repositoryAll = "NewTestRepositoryAll.git"; String repositoryUmask = "NewTestRepositoryUmask.git"; String sgidParent = "sgid"; File parent = new File(GitBlitSuite.REPOSITORIES, sgidParent); File folder = null;//from w ww .jav a 2s . c om boolean parentExisted = parent.exists(); try { if (!parentExisted) { assertTrue("Could not create SGID parent folder.", parent.mkdir()); } int mode = JnaUtils.getFilemode(parent); assertTrue(mode > 0); assertEquals(0, JnaUtils.setFilemode(parent, mode | JnaUtils.S_ISGID | JnaUtils.S_IWGRP)); Repository repository = JGitUtils.createRepository(parent, repositoryAll, "all"); folder = FileKey.resolve(new File(parent, repositoryAll), FS.DETECTED); assertNotNull(repository); assertEquals("2", repository.getConfig().getString("core", null, "sharedRepository")); assertTrue(folder.exists()); mode = JnaUtils.getFilemode(folder); assertEquals(JnaUtils.S_ISGID, mode & JnaUtils.S_ISGID); mode = JnaUtils.getFilemode(folder.getAbsolutePath() + "/HEAD"); assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP, mode & JnaUtils.S_IRWXG); assertEquals(JnaUtils.S_IROTH, mode & JnaUtils.S_IRWXO); mode = JnaUtils.getFilemode(folder.getAbsolutePath() + "/config"); assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP, mode & JnaUtils.S_IRWXG); assertEquals(JnaUtils.S_IROTH, mode & JnaUtils.S_IRWXO); repository.close(); RepositoryCache.close(repository); repository = JGitUtils.createRepository(parent, repositoryUmask, "umask"); folder = FileKey.resolve(new File(parent, repositoryUmask), FS.DETECTED); assertNotNull(repository); assertEquals(null, repository.getConfig().getString("core", null, "sharedRepository")); assertTrue(folder.exists()); mode = JnaUtils.getFilemode(folder); assertEquals(JnaUtils.S_ISGID, mode & JnaUtils.S_ISGID); repository.close(); RepositoryCache.close(repository); } finally { FileUtils.delete(new File(parent, repositoryAll), FileUtils.RECURSIVE | FileUtils.IGNORE_ERRORS); FileUtils.delete(new File(parent, repositoryUmask), FileUtils.RECURSIVE | FileUtils.IGNORE_ERRORS); if (!parentExisted) { FileUtils.delete(parent, FileUtils.RECURSIVE | FileUtils.IGNORE_ERRORS); } } } }
From source file:com.gitblit.tests.JnaUtilsTest.java
License:Apache License
@Test public void testGetFilemode() throws IOException { if (JnaUtils.isWindows()) { try {/*from w ww .java 2 s . co m*/ JnaUtils.getFilemode(GitBlitSuite.REPOSITORIES); } catch (UnsupportedOperationException e) { } } else { String repositoryName = "NewJnaTestRepository.git"; Repository repository = JGitUtils.createRepository(GitBlitSuite.REPOSITORIES, repositoryName); File folder = FileKey.resolve(new File(GitBlitSuite.REPOSITORIES, repositoryName), FS.DETECTED); assertTrue(folder.exists()); int mode = JnaUtils.getFilemode(folder); assertTrue(mode > 0); assertEquals(JnaUtils.S_IFDIR, (mode & JnaUtils.S_IFMT)); // directory assertEquals(JnaUtils.S_IRUSR | JnaUtils.S_IWUSR | JnaUtils.S_IXUSR, (mode & JnaUtils.S_IRWXU)); // owner full access mode = JnaUtils.getFilemode(folder.getAbsolutePath() + "/config"); assertTrue(mode > 0); assertEquals(JnaUtils.S_IFREG, (mode & JnaUtils.S_IFMT)); // directory assertEquals(JnaUtils.S_IRUSR | JnaUtils.S_IWUSR, (mode & JnaUtils.S_IRWXU)); // owner full access repository.close(); RepositoryCache.close(repository); FileUtils.deleteDirectory(repository.getDirectory()); } }
From source file:com.gitblit.tests.JnaUtilsTest.java
License:Apache License
@Test public void testSetFilemode() throws IOException { if (JnaUtils.isWindows()) { try {/*from ww w. j a v a2 s . c o m*/ JnaUtils.getFilemode(GitBlitSuite.REPOSITORIES); } catch (UnsupportedOperationException e) { } } else { String repositoryName = "NewJnaTestRepository.git"; Repository repository = JGitUtils.createRepository(GitBlitSuite.REPOSITORIES, repositoryName); File folder = FileKey.resolve(new File(GitBlitSuite.REPOSITORIES, repositoryName), FS.DETECTED); assertTrue(folder.exists()); File path = new File(folder, "refs"); int mode = JnaUtils.getFilemode(path); assertTrue(mode > 0); assertEquals(JnaUtils.S_IFDIR, (mode & JnaUtils.S_IFMT)); // directory assertEquals(JnaUtils.S_IRUSR | JnaUtils.S_IWUSR | JnaUtils.S_IXUSR, (mode & JnaUtils.S_IRWXU)); // owner full access mode |= JnaUtils.S_ISGID; mode |= JnaUtils.S_IRWXG; int ret = JnaUtils.setFilemode(path, mode); assertEquals(0, ret); mode = JnaUtils.getFilemode(path); assertTrue(mode > 0); assertEquals(JnaUtils.S_ISGID, (mode & JnaUtils.S_ISGID)); // set-gid-bit set assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP | JnaUtils.S_IXGRP, (mode & JnaUtils.S_IRWXG)); // group full access path = new File(folder, "config"); mode = JnaUtils.getFilemode(path.getAbsolutePath()); assertTrue(mode > 0); assertEquals(JnaUtils.S_IFREG, (mode & JnaUtils.S_IFMT)); // directory assertEquals(JnaUtils.S_IRUSR | JnaUtils.S_IWUSR, (mode & JnaUtils.S_IRWXU)); // owner full access mode |= (JnaUtils.S_IRGRP | JnaUtils.S_IWGRP); ret = JnaUtils.setFilemode(path.getAbsolutePath(), mode); assertEquals(0, ret); mode = JnaUtils.getFilemode(path.getAbsolutePath()); assertTrue(mode > 0); assertEquals(JnaUtils.S_IRGRP | JnaUtils.S_IWGRP, (mode & JnaUtils.S_IRWXG)); // group full access repository.close(); RepositoryCache.close(repository); FileUtils.deleteDirectory(repository.getDirectory()); } }
From source file:org.flowerplatform.web.git.GitService.java
License:Open Source License
public void deleteRepository(ServiceInvocationContext context, List<PathFragment> selectedNode) { Repository repository = (Repository) GenericTreeStatefulService.getNodeByPathFor(selectedNode, null); GenericTreeStatefulService service = GenericTreeStatefulService.getServiceFromPathWithRoot(selectedNode); NodeInfo repositoryNodeInfo = service.getVisibleNodes().get(repository); ProgressMonitor monitor = ProgressMonitor.create( GitPlugin.getInstance().getMessage("git.deleteRepo.monitor.title"), context.getCommunicationChannel()); try {// w w w. j a v a2 s. c om monitor.beginTask(GitPlugin.getInstance().getMessage("git.deleteRepo.monitor.message", new Object[] { GitPlugin.getInstance().getUtils().getRepositoryName(repository) }), 2); repository.getObjectDatabase().close(); repository.getRefDatabase().close(); // delete repositories from cache File[] children = repository.getDirectory().getParentFile().getParentFile().listFiles(); for (File child : children) { Repository repo = GitPlugin.getInstance().getUtils().getRepository(child); RepositoryCache.close(repo); } monitor.worked(1); // delete repository files File repoFile = repository.getDirectory().getParentFile().getParentFile(); if (GitUtils.GIT_REPOSITORIES_NAME.equals(repoFile.getParentFile().getName())) { GitPlugin.getInstance().getUtils().delete(repoFile); } monitor.worked(1); dispatchContentUpdate(repositoryNodeInfo.getParent().getNode()); } catch (Exception e) { logger.debug(GitPlugin.getInstance().getMessage("git.deleteRepo.error"), e); context.getCommunicationChannel().appendOrSendCommand( new DisplaySimpleMessageClientCommand(CommonPlugin.getInstance().getMessage("error"), GitPlugin.getInstance().getMessage("git.deleteRepo.error"), DisplaySimpleMessageClientCommand.ICON_ERROR)); } finally { monitor.done(); } }