Example usage for org.eclipse.jgit.lib RepositoryCache close

List of usage examples for org.eclipse.jgit.lib RepositoryCache close

Introduction

In this page you can find the example usage for org.eclipse.jgit.lib RepositoryCache close.

Prototype

public static void close(@NonNull Repository db) 

Source Link

Document

Close and remove a repository from the cache.

Usage

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