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

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

Introduction

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

Prototype

@Override
public void close() 

Source Link

Document

Decrement the use count, and maybe close resources.

Usage

From source file:com.google.gerrit.server.changedetail.RebaseChange.java

License:Apache License

public boolean canRebase(RevisionResource r) {
    Repository git;
    try {/* w  w w  .  j ava2s.c o m*/
        git = gitManager.openRepository(r.getChange().getProject());
    } catch (RepositoryNotFoundException err) {
        return false;
    } catch (IOException err) {
        return false;
    }
    try {
        findBaseRevision(r.getPatchSet().getId(), db.get(), r.getChange().getDest(), git, null, null, null);
        return true;
    } catch (IOException e) {
        return false;
    } catch (OrmException e) {
        return false;
    } finally {
        git.close();
    }
}

From source file:com.google.gerrit.server.changedetail.RebaseChange.java

License:Apache License

public static boolean canDoRebase(final ReviewDb db, final Change change, final GitRepositoryManager gitManager,
        List<PatchSetAncestor> patchSetAncestors, List<PatchSet> depPatchSetList, List<Change> depChangeList)
        throws OrmException, RepositoryNotFoundException, IOException {

    final Repository git = gitManager.openRepository(change.getProject());

    try {/*from   w  w  w .java 2 s. com*/
        // If no exception is thrown, then we can do a rebase.
        findBaseRevision(change.currentPatchSetId(), db, change.getDest(), git, patchSetAncestors,
                depPatchSetList, depChangeList);
        return true;
    } catch (IOException e) {
        return false;
    } finally {
        git.close();
    }
}

From source file:com.google.gerrit.server.git.gpg.PushCertificateChecker.java

License:Apache License

/**
 * Check a push certificate./*from w  w  w  . j  a va2  s  .c om*/
 *
 * @return result of the check.
 * @throws PGPException if an error occurred during GPG checks.
 * @throws IOException if an error occurred reading from the repository.
 */
public final CheckResult check(PushCertificate cert) throws PGPException, IOException {
    if (cert.getNonceStatus() != NonceStatus.OK) {
        return new CheckResult("Invalid nonce");
    }
    PGPSignature sig = readSignature(cert);
    if (sig == null) {
        return new CheckResult("Invalid signature format");
    }
    Repository repo = getRepository();
    List<String> problems = new ArrayList<>();
    try (PublicKeyStore store = new PublicKeyStore(repo)) {
        checkSignature(sig, cert, store.get(sig.getKeyID()), problems);
        checkCustom(repo, problems);
        return new CheckResult(problems);
    } finally {
        if (shouldClose(repo)) {
            repo.close();
        }
    }
}

From source file:com.google.gerrit.server.index.ChangeBatchIndexer.java

License:Apache License

private Callable<Void> reindexProject(final ChangeIndexer indexer, final Project.NameKey project,
        final Task done, final Task failed, final PrintWriter verboseWriter) {
    return new Callable<Void>() {
        @Override//from  www. j  av  a2s.c  o m
        public Void call() throws Exception {
            Multimap<ObjectId, ChangeData> byId = ArrayListMultimap.create();
            ReviewDb db = schemaFactory.open();
            try {
                Repository repo = repoManager.openRepository(project);
                try {
                    Map<String, Ref> refs = repo.getAllRefs();
                    for (Change c : db.changes().byProject(project)) {
                        Ref r = refs.get(c.currentPatchSetId().toRefName());
                        if (r != null) {
                            byId.put(r.getObjectId(), new ChangeData(c));
                        }
                    }
                    new ProjectIndexer(indexer, byId, repo, done, failed, verboseWriter).call();
                } finally {
                    repo.close();
                    // TODO(dborowitz): Opening all repositories in a live server may be
                    // wasteful; see if we can determine which ones it is safe to close
                    // with RepositoryCache.close(repo).
                }
            } finally {
                db.close();
            }
            return null;
        }
    };
}

From source file:com.google.gerrit.server.mail.NewChangeSender.java

License:Apache License

/** Show patch set as unified difference.  */
public String getUnifiedDiff() {
    PatchList patchList;//from w w w  . ja va  2s . c  o m
    try {
        patchList = getPatchList();
        if (patchList.getOldId() == null) {
            // Octopus merges are not well supported for diff output by Gerrit.
            // Currently these always have a null oldId in the PatchList.
            return "";
        }
    } catch (PatchListNotAvailableException e) {
        log.error("Cannot format patch", e);
        return "";
    }

    TemporaryBuffer.Heap buf = new TemporaryBuffer.Heap(args.settings.maximumDiffSize);
    DiffFormatter fmt = new DiffFormatter(buf);
    Repository git;
    try {
        git = args.server.openRepository(change.getProject());
    } catch (IOException e) {
        log.error("Cannot open repository to format patch", e);
        return "";
    }
    try {
        fmt.setRepository(git);
        fmt.setDetectRenames(true);
        fmt.format(patchList.getOldId(), patchList.getNewId());
        return RawParseUtils.decode(buf.toByteArray());
    } catch (IOException e) {
        if (JGitText.get().inMemoryBufferLimitExceeded.equals(e.getMessage())) {
            return "";
        }
        log.error("Cannot format patch", e);
        return "";
    } finally {
        fmt.release();
        git.close();
    }
}

From source file:com.google.gerrit.server.project.PerformCreateProject.java

License:Apache License

public Project createProject() throws ProjectCreationFailedException {
    validateParameters();/* w w  w .  j  a v a2s. c om*/
    final Project.NameKey nameKey = createProjectArgs.getProject();
    try {
        final String head = createProjectArgs.permissionsOnly ? RefNames.REFS_CONFIG
                : createProjectArgs.branch.get(0);
        final Repository repo = repoManager.createRepository(nameKey);
        try {
            NewProjectCreatedListener.Event event = new NewProjectCreatedListener.Event() {
                @Override
                public String getProjectName() {
                    return nameKey.get();
                }

                @Override
                public String getHeadName() {
                    return head;
                }
            };
            for (NewProjectCreatedListener l : createdListener) {
                try {
                    l.onNewProjectCreated(event);
                } catch (RuntimeException e) {
                    log.warn("Failure in NewProjectCreatedListener", e);
                }
            }

            final RefUpdate u = repo.updateRef(Constants.HEAD);
            u.disableRefLog();
            u.link(head);

            createProjectConfig();

            if (!createProjectArgs.permissionsOnly && createProjectArgs.createEmptyCommit) {
                createEmptyCommits(repo, nameKey, createProjectArgs.branch);
            }

            return projectCache.get(nameKey).getProject();
        } finally {
            repo.close();
        }
    } catch (RepositoryCaseMismatchException e) {
        throw new ProjectCreationFailedException(
                "Cannot create " + nameKey.get() + " because the name is already occupied by another project."
                        + " The other project has the same name, only spelled in a" + " different case.",
                e);
    } catch (RepositoryNotFoundException badName) {
        throw new ProjectCreationFailedException("Cannot create " + nameKey, badName);
    } catch (IllegalStateException err) {
        try {
            final Repository repo = repoManager.openRepository(nameKey);
            try {
                if (repo.getObjectDatabase().exists()) {
                    throw new ProjectCreationFailedException("project \"" + nameKey + "\" exists");
                }
                throw err;
            } finally {
                repo.close();
            }
        } catch (IOException ioErr) {
            final String msg = "Cannot create " + nameKey;
            log.error(msg, err);
            throw new ProjectCreationFailedException(msg, ioErr);
        }
    } catch (Exception e) {
        final String msg = "Cannot create " + nameKey;
        log.error(msg, e);
        throw new ProjectCreationFailedException(msg, e);
    }
}

From source file:com.google.gerrit.server.query.change.MessagePredicate.java

License:Apache License

@Override
public boolean match(ChangeData object) throws OrmException {
    final PatchSet patchSet = object.currentPatchSet(db);

    if (patchSet == null) {
        return false;
    }/*  www  . j a v a2s.co m*/

    final RevId revision = patchSet.getRevision();

    if (revision == null) {
        return false;
    }

    final AnyObjectId objectId = ObjectId.fromString(revision.get());

    if (objectId == null) {
        return false;
    }

    final Change change = object.change(db);

    if (change == null) {
        return false;
    }

    final Project.NameKey projectName = change.getProject();

    if (projectName == null) {
        return false;
    }

    try {
        final Repository repo = repoManager.openRepository(projectName);
        try {
            final RevWalk rw = new RevWalk(repo);
            try {
                return rFilter.include(rw, rw.parseCommit(objectId));
            } finally {
                rw.release();
            }
        } finally {
            repo.close();
        }
    } catch (RepositoryNotFoundException e) {
        log.error("Repository \"" + projectName.get() + "\" unknown.", e);
    } catch (MissingObjectException e) {
        log.error(projectName.get() + "\" commit does not exist.", e);
    } catch (IncorrectObjectTypeException e) {
        log.error(projectName.get() + "\" revision is not a commit.", e);
    } catch (IOException e) {
        log.error("Could not search for commit message in \"" + projectName.get() + "\" repository.", e);
    }

    return false;
}

From source file:com.google.gerrit.server.query.change.RevWalkPredicate.java

License:Apache License

@Override
public boolean match(ChangeData object) throws OrmException {
    final PatchSet patchSet = object.currentPatchSet();
    if (patchSet == null) {
        return false;
    }/*from   w w w.j av  a  2s  . co  m*/

    final RevId revision = patchSet.getRevision();
    if (revision == null) {
        return false;
    }

    final AnyObjectId objectId = ObjectId.fromString(revision.get());
    if (objectId == null) {
        return false;
    }

    Change change = object.change();
    if (change == null) {
        return false;
    }

    final Project.NameKey projectName = change.getProject();
    if (projectName == null) {
        return false;
    }

    Arguments args = new Arguments(patchSet, revision, objectId, change, projectName);

    try {
        final Repository repo = repoManager.openRepository(projectName);
        try {
            final RevWalk rw = new RevWalk(repo);
            try {
                return match(repo, rw, args);
            } finally {
                rw.release();
            }
        } finally {
            repo.close();
        }
    } catch (RepositoryNotFoundException e) {
        log.error("Repository \"" + projectName.get() + "\" unknown.", e);
    } catch (IOException e) {
        log.error(projectName.get() + " cannot be read as a repository", e);
    }
    return false;
}

From source file:com.google.gerrit.server.schema.Schema_53.java

License:Apache License

private void exportProjectConfig(ReviewDb db) throws OrmException, SQLException {
    Statement stmt = ((JdbcSchema) db).getConnection().createStatement();
    ResultSet rs = stmt.executeQuery("SELECT * FROM projects ORDER BY name");
    while (rs.next()) {
        final String name = rs.getString("name");
        final Project.NameKey nameKey = new Project.NameKey(name);

        Repository git;
        try {//w  w  w  .j av a2 s .  c  o m
            git = mgr.openRepository(nameKey);
        } catch (RepositoryNotFoundException notFound) {
            // A repository may be missing if this project existed only to store
            // inheritable permissions. For example 'All-Projects'.
            try {
                git = mgr.createRepository(nameKey);
            } catch (RepositoryNotFoundException err) {
                throw new OrmException("Cannot create repository " + name, err);
            }
        }
        try {
            MetaDataUpdate md = new MetaDataUpdate(new NoReplication(), nameKey, git);
            md.getCommitBuilder().setAuthor(serverUser);
            md.getCommitBuilder().setCommitter(serverUser);

            ProjectConfig config = ProjectConfig.read(md);
            loadProject(rs, config.getProject());
            config.getAccessSections().clear();
            convertRights(config);

            // Grant out read on the config branch by default.
            //
            if (config.getProject().getNameKey().equals(systemConfig.wildProjectName)) {
                AccessSection meta = config.getAccessSection(GitRepositoryManager.REF_CONFIG, true);
                Permission read = meta.getPermission(READ, true);
                read.getRule(config.resolve(projectOwners), true);
            }

            md.setMessage("Import project configuration from SQL\n");
            if (!config.commit(md)) {
                throw new OrmException("Cannot export project " + name);
            }
        } catch (ConfigInvalidException err) {
            throw new OrmException("Cannot read project " + name, err);
        } catch (IOException err) {
            throw new OrmException("Cannot export project " + name, err);
        } finally {
            git.close();
        }
    }
    rs.close();
    stmt.close();
}

From source file:com.google.gerrit.server.schema.Schema_56.java

License:Apache License

@Override
protected void migrateData(ReviewDb db, UpdateUI ui) {
    for (Project.NameKey name : mgr.list()) {
        Repository git;
        try {/*from   w ww.j a v a2s.c om*/
            git = mgr.openRepository(name);
        } catch (RepositoryNotFoundException e) {
            ui.message("warning: Cannot open " + name.get());
            continue;
        }
        try {
            Map<String, Ref> all = git.getAllRefs();
            if (all.keySet().equals(keysOne) || all.keySet().equals(keysTwo)) {
                try {
                    RefUpdate update = git.updateRef(Constants.HEAD);
                    update.disableRefLog();
                    update.link(GitRepositoryManager.REF_CONFIG);
                } catch (IOException err) {
                    ui.message("warning: " + name.get() + ": Cannot update HEAD to "
                            + GitRepositoryManager.REF_CONFIG + ": " + err.getMessage());
                }
            }
        } finally {
            git.close();
        }
    }
}