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

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

Introduction

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

Prototype

@NonNull
public abstract ObjectDatabase getObjectDatabase();

Source Link

Document

Get the object database which stores this repository's data.

Usage

From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitMergeSupport.java

License:Apache License

@NotNull
private ObjectId mergeCommits(@NotNull GitVcsRoot gitRoot, @NotNull Repository db, @NotNull RevCommit srcCommit,
        @NotNull RevCommit dstCommit, @NotNull String message, @NotNull MergeOptions options)
        throws IOException, MergeFailedException {
    if (!alwaysCreateMergeCommit(options)) {
        RevWalk walk = new RevWalk(db);
        try {/*from   ww w  .ja v  a  2s. c o  m*/
            if (walk.isMergedInto(walk.parseCommit(dstCommit), walk.parseCommit(srcCommit))) {
                LOG.debug("Commit " + srcCommit.name() + " already merged into " + dstCommit
                        + ", skip the merge");
                return srcCommit;
            }
        } finally {
            walk.release();
        }
    }

    if (tryRebase(options)) {
        LOG.debug("Run rebase, root " + gitRoot + ", revision " + srcCommit.name() + ", destination "
                + dstCommit.name());
        try {
            return rebase(gitRoot, db, srcCommit, dstCommit);
        } catch (MergeFailedException e) {
            if (enforceLinearHistory(options)) {
                LOG.debug("Rebase failed, root " + gitRoot + ", revision " + srcCommit.name() + ", destination "
                        + dstCommit.name(), e);
                throw e;
            }
        } catch (IOException e) {
            if (enforceLinearHistory(options)) {
                LOG.debug("Rebase failed, root " + gitRoot + ", revision " + srcCommit.name() + ", destination "
                        + dstCommit.name(), e);
                throw e;
            }
        }
    }

    ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(db, true);
    boolean mergeSuccessful = merger.merge(dstCommit, srcCommit);
    if (!mergeSuccessful) {
        List<String> conflicts = merger.getUnmergedPaths();
        Collections.sort(conflicts);
        LOG.debug("Merge failed with conflicts, root " + gitRoot + ", revision " + srcCommit.name()
                + ", destination " + dstCommit.name() + ", conflicts " + conflicts);
        throw new MergeFailedException(conflicts);
    }

    ObjectInserter inserter = db.newObjectInserter();
    DirCache dc = DirCache.newInCore();
    DirCacheBuilder dcb = dc.builder();

    dcb.addTree(new byte[] {}, 0, db.getObjectDatabase().newReader(), merger.getResultTreeId());
    inserter.flush();
    dcb.finish();

    ObjectId writtenTreeId = dc.writeTree(inserter);

    CommitBuilder commitBuilder = new CommitBuilder();
    commitBuilder.setCommitter(gitRoot.getTagger(db));
    commitBuilder.setAuthor(gitRoot.getTagger(db));
    commitBuilder.setMessage(message);
    commitBuilder.addParentId(dstCommit);
    commitBuilder.addParentId(srcCommit);
    commitBuilder.setTreeId(writtenTreeId);

    ObjectId commitId = inserter.insert(commitBuilder);
    inserter.flush();
    return commitId;
}

From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitServerUtil.java

License:Apache License

public static boolean isCloned(@NotNull Repository db) throws VcsException, IOException {
    if (!db.getObjectDatabase().exists())
        return false;
    ObjectReader reader = db.getObjectDatabase().newReader();
    try {//  ww w  . ja  v a2s.com
        for (Ref ref : db.getRefDatabase().getRefs(RefDatabase.ALL).values()) {
            if (reader.has(ref.getObjectId()))
                return true;
        }
    } finally {
        reader.release();
    }
    return false;
}

From source file:jetbrains.buildServer.buildTriggers.vcs.git.patch.BulkPatchBuilderImpl.java

License:Apache License

public void buildPatches(@NotNull final VcsRoot root, @NotNull final CheckoutRules rules,
        @NotNull final List<BulkPatchBuilderRequest> requests, @NotNull final BulkPatchBuilder patch)
        throws VcsException, IOException {
    final OperationContext ctx = myVcs.createContext(root, "bulk patch " + requests.size() + " commits");
    try {/*ww w  .  java 2  s .c  o  m*/
        final Repository myRepo = ctx.getRepository();
        final ObjectReader contentsReader = myRepo.getObjectDatabase().newReader();
        final ObjectReader treesReader = myRepo.getObjectDatabase().newReader();

        for (BulkPatchBuilderRequest request : requests) {
            final PatchBuilder patchBuilder = patch.startPatch(request);

            final String prevBase = request.getFromVersion();
            final String toBase = request.getToVersion();

            try {
                new GitPatchBuilder(ctx, patchBuilder, prevBase, toBase, rules, myConfig.verboseTreeWalkLog()) {
                    @NotNull
                    @Override
                    protected ObjectReader newObjectReaderForTree() {
                        return treesReader;
                    }

                    @NotNull
                    @Override
                    protected ContentLoaderFactory contentLoaderFactory() {
                        return new ContentLoaderFactory() {
                            @Nullable
                            public ObjectLoader open(@NotNull final Repository repo, @NotNull final ObjectId id)
                                    throws IOException {
                                assert repo == myRepo;
                                return contentsReader.open(id);
                            }
                        };
                    }
                }.buildPatch();

            } catch (Throwable e) {
                throw new VcsException(
                        "Failed to build patch " + prevBase + " -> " + toBase + ". " + e.getMessage(), e);
            } finally {
                patch.endPatch(request, patchBuilder);
            }
        }
    } catch (Throwable e) {
        throw new VcsException("Failed to complete bulk patch." + e.getMessage(), e);
    } finally {
        ctx.close();
    }
}

From source file:org.basinmc.maven.plugins.minecraft.patch.SafeguardMojo.java

License:Apache License

/**
 * {@inheritDoc}/*from ww w .  ja va 2s  .  co m*/
 */
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
    this.verifyProperties("sourceDirectory", "force");

    this.getLog().info("Running repository safeguard checks");

    if (this.isForced()) {
        this.getLog().warn("Skipping safeguard - Override is enabled\n" + "\n"
                + "+--------------------------------------+\n" + "|                                      |\n"
                + "|    THIS MAY CAUSE LOSS OF CHANGES    |\n" + "|         USE AT YOUR OWN RISK         |\n"
                + "|                                      |\n" + "+--------------------------------------+\n");
        return;
    }

    try {
        Repository repository = new FileRepositoryBuilder().setWorkTree(this.getSourceDirectory()).build();

        if (!repository.getObjectDatabase().exists()) {
            this.getLog().info("Skipping safeguard - No repository in source path");
            return;
        }

        Git git = new Git(repository);

        if (!git.status().call().isClean()) {
            this.getLog().error(
                    "The repository at " + this.getSourceDirectory().toString() + " is not in a clean state");
            this.getLog().error(
                    "As such the build will be halted - Please verify that all changes you wish to retain have been commited and turned into patch files");
            this.getLog().error(
                    "If you wish to override this behavior, start the build by passing -Dminecraft.force=true");

            throw new MojoFailureException("Repository is in a dirty state");
        }

        // TODO: Compare number of commits since first commit against amount of patches to
        // prevent accidental loss of changes due to the pending git reset operation
    } catch (GitAPIException ex) {
        throw new MojoFailureException("Failed to execute git command: " + ex.getMessage(), ex);
    } catch (IOException ex) {
        throw new MojoFailureException("Could not access source repository: " + ex.getMessage(), ex);
    }
}

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 {//from w  w  w  . ja  va2s  . c o m
        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();
    }
}

From source file:org.impressivecode.depress.scm.git.GitOnlineLogParser.java

License:Open Source License

private static Git initializeGit(final String path) throws IOException, NoHeadException {
    RepositoryBuilder gitRepoBuilder = new RepositoryBuilder();
    Repository gitRepo = gitRepoBuilder.setGitDir(new File(path)).readEnvironment().findGitDir().build();
    Git git = new Git(gitRepo);

    // Make sure path contains a git repository.
    if (!gitRepo.getObjectDatabase().exists()) {
        throw new NoHeadException("Directory " + path + " does not look like a git repository.");
    }//from  ww w.  j  a  va  2 s .  c  o  m

    return git;
}

From source file:org.kercoin.magrit.core.dao.BuildDAOImpl.java

License:Open Source License

@Override
public void save(BuildResult buildResult, Repository repo, String userName, Pair<Long, Integer> when) {
    ObjectInserter db = null;/*from   w  ww . j av  a 2s.  com*/
    try {
        db = repo.getObjectDatabase().newInserter();
        RevCommit commitId = gitUtils.getCommit(repo, buildResult.getCommitSha1());

        ObjectId logSha1 = writeBlob(db, buildResult.getLog());
        String content = serializeResult(buildResult, userName, when, logSha1);
        ObjectId resultBlobId = writeBlob(db, content.getBytes(UTF8));

        String noteContent = buildNoteContent(repo, commitId, resultBlobId);
        writeNote(repo, commitId, noteContent);

        db.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (db != null) {
            db.release();
        }
    }
}

From source file:org.kercoin.magrit.core.utils.GitUtils.java

License:Open Source License

public byte[] showBytes(Repository repository, String revstr) throws AmbiguousObjectException, IOException {
    ObjectId ref = repository.resolve(revstr);
    if (ref == null) {
        return null;
    }/*  w  w w . jav a  2s .com*/
    return repository.getObjectDatabase().newReader().open(ref).getBytes();
}

From source file:org.kuali.student.git.model.TestKSRevision27975.java

License:Educational Community License

@Test
public void testRevision27975() throws IOException {
    File gitRepository = new File("target/ks-r27975");

    FileUtils.deleteDirectory(gitRepository);

    Repository repository = GitRepositoryUtils.buildFileRepository(gitRepository, true);

    GitImporterMain/*from w ww.  ja v a  2  s .c  om*/
            .main(new String[] { "src/test/resources/ks-r27975.dump.bz2", gitRepository.getAbsolutePath(),
                    "target/ks-r27975-ks-veto.log", "target/ks-r27975-ks-copyFrom-skipped.log",
                    "target/ks-r27975-blob.log", "0", "https://svn.kuali.org/repos/student", "uuid" });

    RevWalk rw = new RevWalk(repository);

    Ref branch = repository.getRef("sandbox_ks-1.3-core-slice-demo_modules_ks-pom_trunk");

    Assert.assertNotNull(branch);

    RevCommit headCommit = rw.parseCommit(branch.getObjectId());

    TreeWalk tw = new TreeWalk(repository);

    tw.addTree(headCommit.getTree().getId());

    tw.setRecursive(true);

    int blobCount = 0;

    ObjectId blobId = null;

    while (tw.next()) {

        if (tw.getFileMode(0) == FileMode.REGULAR_FILE) {
            blobCount++;

            blobId = tw.getObjectId(0);
        }
    }

    Assert.assertEquals(1, blobCount);

    ObjectLoader blobLoader = repository.getObjectDatabase().newReader().open(blobId);

    List<String> lines = IOUtils.readLines(blobLoader.openStream());

    Assert.assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>", lines.get(0));

    tw.release();

    rw.release();
    repository.close();

}

From source file:org.sonarsource.scm.git.JGitBlameCommand.java

License:Open Source License

private static Repository buildRepository(File basedir) {
    RepositoryBuilder repoBuilder = new RepositoryBuilder().findGitDir(basedir).setMustExist(true);
    if (repoBuilder.getGitDir() == null) {
        throw MessageException.of(basedir + " doesn't seem to be contained in a Git repository");
    }/* w ww  .j a  va 2  s  .c o m*/
    try {
        Repository repo = repoBuilder.build();
        // SONARSCGIT-2 Force initialization of shallow commits to avoid later concurrent modification issue
        repo.getObjectDatabase().newReader().getShallowCommits();
        return repo;
    } catch (IOException e) {
        throw new IllegalStateException("Unable to open Git repository", e);
    }
}