Example usage for org.eclipse.jgit.api Git getRepository

List of usage examples for org.eclipse.jgit.api Git getRepository

Introduction

In this page you can find the example usage for org.eclipse.jgit.api Git getRepository.

Prototype

public Repository getRepository() 

Source Link

Document

Get repository

Usage

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected String doDiff(Git git, String objectId, String baseObjectId, String pathOrBlobPath)
        throws IOException {
    Repository r = git.getRepository();
    String blobPath = trimLeadingSlash(pathOrBlobPath);

    RevCommit commit;// w w  w  . j  a v  a  2 s.co m
    if (Strings.isNotBlank(objectId)) {
        commit = CommitUtils.getCommit(r, objectId);
    } else {
        commit = CommitUtils.getHead(r);
    }
    RevCommit baseCommit = null;
    if (Strings.isNotBlank(baseObjectId) && !Objects.equals(baseObjectId, objectId)) {
        baseCommit = CommitUtils.getCommit(r, baseObjectId);
    }

    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    DiffFormatter formatter = createDiffFormatter(r, buffer);

    RevTree commitTree = commit.getTree();
    RevTree baseTree;
    if (baseCommit == null) {
        if (commit.getParentCount() > 0) {
            final RevWalk rw = new RevWalk(r);
            RevCommit parent = rw.parseCommit(commit.getParent(0).getId());
            rw.dispose();
            baseTree = parent.getTree();
        } else {
            // FIXME initial commit. no parent?!
            baseTree = commitTree;
        }
    } else {
        baseTree = baseCommit.getTree();
    }

    List<DiffEntry> diffEntries = formatter.scan(baseTree, commitTree);
    if (blobPath != null && blobPath.length() > 0) {
        for (DiffEntry diffEntry : diffEntries) {
            if (diffEntry.getNewPath().equalsIgnoreCase(blobPath)) {
                formatter.format(diffEntry);
                break;
            }
        }
    } else {
        formatter.format(diffEntries);
    }
    formatter.flush();
    return buffer.toString();
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected CommitDetail doCommitDetail(Git git, String commitId) throws IOException {
    RevCommit baseCommit = doGetCommit(git, commitId);
    if (baseCommit == null) {
        return null;
    } else {//from ww w.j  av a 2s  .  com
        List<DiffInfo> diffs = new ArrayList<>();

        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        Repository r = git.getRepository();
        DiffFormatter formatter = createDiffFormatter(r, buffer);

        //git.diff().setNewTree()
        RevTree commitTree = baseCommit.getTree();
        RevTree baseTree = null;
        ObjectId parentId = null;
        if (baseCommit.getParentCount() > 0) {
            final RevWalk rw = new RevWalk(r);
            parentId = baseCommit.getParent(0).getId();
            RevCommit parent = rw.parseCommit(parentId);
            baseTree = parent.getTree();
            rw.dispose();

        } else {
            // FIXME initial commit. no parent?!
            baseTree = commitTree;
        }
        if (baseTree == null) {
            baseTree = baseCommit.getTree();
        }

        List<DiffEntry> diffEntries = formatter.scan(baseTree, commitTree);
        if (diffEntries.isEmpty()) {
            // lets try get the previous commit
            String previousCommit = commitId + "~1";
            ObjectId resolve = r.resolve(previousCommit);
            RevTree newTree = null;
            if (resolve != null) {
                final RevWalk rw = new RevWalk(r);
                RevCommit parent = rw.parseCommit(resolve);
                newTree = parent.getTree();
                rw.dispose();
            }
            if (baseTree == null || newTree == null || !Objects.equals(baseTree.getId(), newTree.getId())) {
                diffEntries = formatter.scan(newTree, commitTree);
            }
        }
        for (DiffEntry diffEntry : diffEntries) {
            formatter.format(diffEntry);
            formatter.flush();
            String diff = buffer.toString();
            buffer.reset();
            DiffInfo diffInfo = createDiffInfo(diffEntry, diff);
            diffs.add(diffInfo);
        }
        CommitInfo commitInfo = createCommitInfo(baseCommit);
        return new CommitDetail(commitInfo, diffs);
    }

}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected static RevCommit doGetCommit(Git git, String commitId) {
    Repository repository = git.getRepository();
    return CommitUtils.getCommit(repository, commitId);
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected List<CommitTreeInfo> doGetCommitTree(Git git, String commitId) {
    Repository repository = git.getRepository();
    List<CommitTreeInfo> list = new ArrayList<CommitTreeInfo>();
    RevCommit commit = CommitUtils.getCommit(repository, commitId);
    if (commit != null) {
        RevWalk rw = new RevWalk(repository);
        try {//from   ww w.j ava  2s  .c  o  m
            if (commit.getParentCount() == 0) {
                TreeWalk treeWalk = new TreeWalk(repository);
                treeWalk.reset();
                treeWalk.setRecursive(true);
                treeWalk.addTree(commit.getTree());
                while (treeWalk.next()) {
                    String pathString = treeWalk.getPathString();
                    ObjectId objectId = treeWalk.getObjectId(0);
                    int rawMode = treeWalk.getRawMode(0);
                    list.add(new CommitTreeInfo(pathString, pathString, 0, rawMode, objectId.getName(),
                            commit.getId().getName(), DiffEntry.ChangeType.ADD));
                }
                treeWalk.close();
            } else {
                RevCommit parent = rw.parseCommit(commit.getParent(0).getId());
                DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE);
                df.setRepository(repository);
                df.setDiffComparator(RawTextComparator.DEFAULT);
                df.setDetectRenames(true);
                List<DiffEntry> diffs = df.scan(parent.getTree(), commit.getTree());
                for (DiffEntry diff : diffs) {
                    String objectId = diff.getNewId().name();
                    if (diff.getChangeType().equals(DiffEntry.ChangeType.DELETE)) {
                        list.add(new CommitTreeInfo(diff.getOldPath(), diff.getOldPath(), 0,
                                diff.getNewMode().getBits(), objectId, commit.getId().getName(),
                                diff.getChangeType()));
                    } else if (diff.getChangeType().equals(DiffEntry.ChangeType.RENAME)) {
                        list.add(new CommitTreeInfo(diff.getOldPath(), diff.getNewPath(), 0,
                                diff.getNewMode().getBits(), objectId, commit.getId().getName(),
                                diff.getChangeType()));
                    } else {
                        list.add(new CommitTreeInfo(diff.getNewPath(), diff.getNewPath(), 0,
                                diff.getNewMode().getBits(), objectId, commit.getId().getName(),
                                diff.getChangeType()));
                    }
                }
            }
        } catch (Throwable e) {
            LOG.warn("Failed to walk tree for commit " + commitId + ". " + e, e);
        } finally {
            rw.dispose();
        }
    }
    return list;
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected List<CommitInfo> doHistory(Git git, String objectId, String pathOrBlobPath, int limit) {
    List<CommitInfo> results = new ArrayList<CommitInfo>();
    Repository r = git.getRepository();

    try {/*from  w w w  . java2 s  .  c  o m*/
        String head = getHEAD(git);
    } catch (Exception e) {
        LOG.error("Cannot find HEAD of this git repository! " + e, e);
        return results;
    }

    String path = trimLeadingSlash(pathOrBlobPath);

    CommitFinder finder = new CommitFinder(r);
    CommitListFilter filter = new CommitListFilter();
    if (Strings.isNotBlank(path)) {
        finder.setFilter(PathFilterUtils.and(path));
    }
    finder.setFilter(filter);

    if (limit > 0) {
        finder.setFilter(new CommitLimitFilter(limit).setStop(true));
    }
    if (Strings.isNotBlank(objectId)) {
        finder.findFrom(objectId);
    } else {
        if (Strings.isNotBlank(branch)) {
            ObjectId branchObjectId = getBranchObjectId(git);
            if (branchObjectId != null) {
                finder = finder.findFrom(branchObjectId);
            } else {
                finder = finder.findInBranches();
            }

        } else {
            finder.find();
        }
    }
    List<RevCommit> commits = filter.getCommits();
    for (RevCommit entry : commits) {
        CommitInfo commitInfo = createCommitInfo(entry);
        results.add(commitInfo);
    }
    return results;
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected <T> T gitOperation(final GitContext context, final GitOperation<T> operation) throws Exception {
    return lockManager.withLock(gitFolder, new Callable<T>() {

        @Override/*from ww  w  . jav  a 2 s. co m*/
        public T call() throws Exception {
            projectFileSystem.cloneRepoIfNotExist(userDetails, basedir, cloneUrl);

            FileRepositoryBuilder builder = new FileRepositoryBuilder();
            Repository repository = builder.setGitDir(gitFolder).readEnvironment() // scan environment GIT_* variables
                    .findGitDir() // scan up the file system tree
                    .build();

            Git git = new Git(repository);
            if (Strings.isNullOrBlank(origin)) {
                throw new IOException("Could not find remote git URL for folder " + gitFolder.getPath());
            }

            CredentialsProvider credentials = userDetails.createCredentialsProvider();
            createPersonIdent();

            disableSslCertificateChecks();
            LOG.info("Stashing local changes to the repo");
            boolean hasHead = true;
            try {
                git.log().all().call();
                hasHead = git.getRepository().getAllRefs().containsKey("HEAD");
            } catch (NoHeadException e) {
                hasHead = false;
            }
            if (hasHead) {
                // lets stash any local changes just in case..
                try {
                    git.stashCreate().setPerson(personIdent).setWorkingDirectoryMessage("Stash before a write")
                            .setRef("HEAD").call();
                } catch (Throwable e) {
                    LOG.error("Failed to stash changes: " + e, e);
                    Throwable cause = e.getCause();
                    if (cause != null && cause != e) {
                        LOG.error("Cause: " + cause, cause);
                    }
                }
            }

            checkoutBranch(git, context);
            if (context.isRequirePull()) {
                doPull(git, context);
            }

            T result = operation.call(git, context);

            if (Strings.isNullOrBlank(message)) {
                message = "";
            }
            if (context.isRequireCommit() && hasGitChanges(git)) {
                doAddCommitAndPushFiles(git, userDetails, personIdent, branch, origin, message,
                        isPushOnCommit());
            }
            return result;
        }

    });
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

public String currentBranch(Git git) {
    try {//  w  w  w .ja  v  a 2s  . co  m
        return git.getRepository().getBranch();
    } catch (IOException e) {
        LOG.warn("Failed to get the current branch due: " + e.getMessage() + ". This exception is ignored.", e);
        return null;
    }
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected String doGetContent(Git git, String objectId, String pathOrBlobPath) {
    objectId = defaultObjectId(git, objectId);
    Repository r = git.getRepository();
    String blobPath = trimLeadingSlash(pathOrBlobPath);
    return BlobUtils.getContent(r, objectId, blobPath);
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected String defaultObjectId(Git git, String objectId) {
    if (objectId == null || objectId.trim().length() == 0) {
        RevCommit commit = CommitUtils.getHead(git.getRepository());
        objectId = commit.getName();//from   ww  w.  j  a v  a2s.  c  om
    }
    return objectId;
}

From source file:io.fabric8.forge.rest.git.RepositoryResource.java

License:Apache License

protected void configureBranch(Git git, String branch) {
    // lets update the merge config
    if (Strings.isNotBlank(branch)) {
        StoredConfig config = git.getRepository().getConfig();
        if (Strings.isNullOrBlank(config.getString("branch", branch, "remote"))
                || Strings.isNullOrBlank(config.getString("branch", branch, "merge"))) {
            config.setString("branch", branch, "remote", getRemote());
            config.setString("branch", branch, "merge", "refs/heads/" + branch);
            try {
                config.save();//from w  w w.  ja v  a2  s. co  m
            } catch (IOException e) {
                LOG.error("Failed to save the git configuration to " + basedir + " with branch " + branch
                        + " on remote repo: " + remoteRepository + " due: " + e.getMessage()
                        + ". This exception is ignored.", e);
            }
        }
    }
}