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

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

Introduction

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

Prototype

@Nullable
public ObjectId resolve(String revstr)
        throws AmbiguousObjectException, IncorrectObjectTypeException, RevisionSyntaxException, IOException 

Source Link

Document

Parse a git revision string and return an object id.

Usage

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 {/*w w  w.jav a2 s .  co m*/
        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.git.internal.GitDataStore.java

License:Apache License

private AbstractTreeIterator getTreeIterator(Repository db, String name) throws IOException {
    final ObjectId id = db.resolve(name);
    if (id == null)
        throw new IllegalArgumentException(name);
    final CanonicalTreeParser p = new CanonicalTreeParser();
    final ObjectReader or = db.newObjectReader();
    try {//from   ww w .j ava 2s. com
        p.reset(or, new RevWalk(db).parseTree(id));
        return p;
    } finally {
        or.release();
    }
}

From source file:io.github.gitfx.util.GitFXGsonUtil.java

License:Apache License

public static GitRepoMetaData getGitRepositoryMetaData(String repoPath) {
    try {/* ww  w . j  av a  2s  .  com*/
        if (!repoPath.endsWith(".git"))
            repoPath = repoPath + "/.git";
        System.out.println("repopath:  " + repoPath);
        GitRepoMetaData gitMetaData = new GitRepoMetaData();
        FileRepositoryBuilder builder = new FileRepositoryBuilder();
        Repository repository = builder.setGitDir(new File(repoPath)).readEnvironment().setMustExist(true)
                .findGitDir().build();
        RevWalk walk = new RevWalk(repository);
        AnyObjectId id = repository.resolve("HEAD");
        if (id == null)
            return null;//Empty repository
        RevCommit rCommit = walk.parseCommit(id);
        walk.markStart(rCommit);
        gitMetaData.setRepository(repository);
        gitMetaData.setRevWalk(walk);
        return gitMetaData;
    } catch (IOException exception) {
        logger.debug("IOException getGitRepositoryMetaData", exception);
    }
    ;
    return null;
}

From source file:io.jenkins.blueocean.blueocean_git_pipeline.GitBareRepoReadSaveRequest.java

License:Open Source License

@Override
void save() throws IOException {
    invokeOnScm(new GitSCMFileSystem.FSFunction<Void>() {
        @Override//from w w w  .j a  va2s  . c o m
        public Void invoke(Repository repo) throws IOException, InterruptedException {
            String localBranchRef = LOCAL_REF_BASE + sourceBranch;

            ObjectId branchHead = repo.resolve(localBranchRef);

            try {
                // Get committer info
                User user = User.current();
                if (user == null) {
                    throw new ServiceException.UnauthorizedException("Not authenticated");
                }
                String mailAddress = MailAddressResolver.resolve(user);
                StandardCredentials credential = getCredential();

                // Make sure up-to-date and credentials work
                GitUtils.fetch(repo, credential);

                GitUtils.commit(repo, localBranchRef, filePath, contents, user.getId(), mailAddress,
                        commitMessage, TimeZone.getDefault(), new Date());

                GitUtils.push(gitSource.getRemote(), repo, credential, localBranchRef,
                        REMOTE_REF_BASE + branch);
                return null;
            } finally {
                // always roll back to undo our local changes
                try {
                    if (branchHead != null) { // branchHead may be null if this was an empty repo
                        RefUpdate rollback = repo.updateRef(localBranchRef);
                        rollback.setNewObjectId(branchHead);
                        rollback.forceUpdate();
                    }
                } catch (Exception ex) {
                    log.log(Level.SEVERE, "Unable to roll back repo after save failure", ex);
                }
            }
        }
    });
}

From source file:jbenchmarker.GitMain.java

License:Open Source License

private boolean gotMerge(String gitdir, String path) throws IOException {
    FileRepositoryBuilder builder = new FileRepositoryBuilder();
    Repository repo = builder.setGitDir(new File(gitdir + "/.git")).readEnvironment().findGitDir().build();
    RevWalk revwalk = new RevWalk(repo);
    revwalk.setTreeFilter(AndTreeFilter.create(PathFilter.create(path), TreeFilter.ANY_DIFF));
    revwalk.markStart(revwalk.parseCommit(repo.resolve("HEAD")));
    Iterator<RevCommit> it = revwalk.iterator();
    while (it.hasNext()) {
        if (it.next().getParentCount() > 1) {
            return true;
        }/*from  w  w w. ja  va  2  s  .  co m*/
    }
    return false;
}

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

License:Apache License

@Nullable
private ObjectId resolve(final Repository r, final Ref tagRef) {
    try {//from w  w w  .  ja v a2 s . com
        return r.resolve(tagRef.getName());
    } catch (IOException e) {
        return null;
    }
}

From source file:jetbrains.buildServer.buildTriggers.vcs.git.tests.SubmoduleTest.java

License:Apache License

/**
 * Test loading mapping for submodules/*  w ww. jav  a  2 s .  c o  m*/
 *
 * @throws IOException if there is IO problem
 */
@Test
public void testSubmoduleMapping() throws Exception {
    File masterRep = dataFile("repo.git");
    Repository r = new RepositoryBuilder().setGitDir(masterRep).build();
    try {
        SubmodulesConfig s = new SubmodulesConfig(r.getConfig(), new BlobBasedConfig(null, r,
                r.resolve(GitUtils.versionRevision(GitVcsSupportTest.SUBMODULE_ADDED_VERSION)), ".gitmodules"));
        assertTrue(s.isSubmodulePrefix(""));
        assertFalse(s.isSubmodulePrefix("submodule"));
        Submodule m = s.findSubmodule("submodule");
        assertEquals(m.getName(), "submodule");
        assertEquals(m.getPath(), "submodule");
        assertEquals(m.getUrl(), "../submodule.git");
    } finally {
        r.close();
    }
}

From source file:model.Buildmodel.java

public int build(Git git, List<RevCommit> logs, RepoSettings rs)
        throws NoHeadException, GitAPIException, IOException {

    //ObjectId lastCommitId = repository.resolve(Constants.MASTER);
    ObjectId parentid = null;/*from  ww w .  j a  v a2s  .  c o  m*/
    ObjectId currid = null;

    Repository repository = git.getRepository();

    //a new reader to read objects from getObjectDatabase()
    ObjectReader reader = repository.newObjectReader();
    CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
    CanonicalTreeParser newTreeIter = new CanonicalTreeParser();

    List<DiffEntry> diffs = null;

    WriteData wd = new WriteData(); //Class to write data to an external file
    wd.initiate(rs);

    int cnt = 0; //Commits count that is written in data
    for (RevCommit rev : logs) {

        if (rev.getParentCount() == 1) { //Not taking Merge commits, for taking them make it >= .

            try {

                parentid = repository.resolve(rev.getParent(0).getName() + "^{tree}");
                currid = repository.resolve(rev.getName() + "^{tree}");

                //Reset this parser to walk through the given tree
                oldTreeIter.reset(reader, parentid);
                newTreeIter.reset(reader, currid);
                diffs = git.diff() //Returns a command object to execute a diff command
                        .setNewTree(newTreeIter).setOldTree(oldTreeIter).call(); //returns a DiffEntry for each path which is different

            } catch (RevisionSyntaxException | IOException | GitAPIException e) {
                e.printStackTrace();
            }

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            //Create a new formatter with a default level of context.
            DiffFormatter df = new DiffFormatter(out);
            //Set the repository the formatter can load object contents from.
            df.setRepository(git.getRepository());

            ArrayList<String> diffText = new ArrayList<String>();
            ArrayList<String> filetypes = new ArrayList<String>();

            //A DiffEntry is 'A value class representing a change to a file' therefore for each file you have a diff entry.
            int ovllineadd = 0;
            int ovllinerem = 0;
            int totallinechanged = 0;
            int totalfilrem = 0;
            int totalfiladd = 0;

            for (DiffEntry diff : diffs) {

                try {

                    df.format(diff); //Format a patch script for one file entry.
                    RawText r = new RawText(out.toByteArray());
                    r.getLineDelimiter();
                    diffText.add(out.toString());

                    String st = out.toString();
                    String filetype = null;
                    int filerem = 0, fileadd = 0, filtyp = 0;
                    ;
                    int lineadd = 0, linerem = 0;

                    String[] temp = st.split("\n");

                    for (String tem : temp) {

                        if (tem.startsWith("---") || tem.startsWith("+++")) {

                            if (tem.startsWith("---")) {
                                if (tem.endsWith("null")) {
                                    fileadd++; //File added
                                } else {
                                    int p = tem.lastIndexOf("/");
                                    if (p >= 0) {
                                        tem = tem.substring(p + 1, tem.length());
                                    }
                                    int h = tem.lastIndexOf(".");
                                    if (h >= 0) {
                                        filetype = tem.substring(h, tem.length());
                                        filetype = filetype.replace(" ", "");
                                        filetype = filetype.replace("\"", "");
                                        if (filtyp != 1) {
                                            filetypes.add(filetype);
                                            filtyp = 1;
                                        }
                                    } else {
                                        //README, LICENSE type wanna do?
                                    }
                                }
                            }
                            if (tem.startsWith("+++")) {
                                if (tem.endsWith("null")) {
                                    filerem++; //Fil removed
                                } else {
                                    int p = tem.lastIndexOf("/");
                                    if (p >= 0) {
                                        tem = tem.substring(p + 1, tem.length());
                                    }
                                    int h = tem.lastIndexOf(".");
                                    if (h >= 0) {
                                        filetype = tem.substring(h, tem.length());
                                        filetype = filetype.replace(" ", "");
                                        filetype = filetype.replace("\"", "");
                                        if (filtyp != 1) {
                                            filetypes.add(filetype);
                                            filtyp = 1;
                                        }
                                    } else {
                                        //README, LICENSE type wanna do?
                                    }
                                }
                            }

                        }

                        if (tem.startsWith("+") && !tem.startsWith("+++")) {
                            lineadd++;
                        } else if (tem.startsWith("-") && !tem.startsWith("---")) {
                            linerem++;
                        }

                    }
                    ovllineadd += lineadd;
                    ovllinerem += linerem;
                    totallinechanged += (lineadd + linerem);
                    totalfiladd += fileadd;
                    totalfilrem += filerem;

                    out.reset();

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            PersonIdent p = rev.getAuthorIdent();
            //DateFormat formatter= new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
            DateFormat formatter = new SimpleDateFormat("HH");
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

            String email = p.getEmailAddress();
            //So that email folder is created properly
            if (email.contains("://") || email.contains("//")) {
                email = email.replace(":", "");
                email = email.replace("//", "");
            }

            String[] commsgwords = rev.getFullMessage().split(" ");

            wd.write(rev.getName(), email, totallinechanged, ovllineadd, ovllinerem, filetypes.size(),
                    totalfiladd, totalfilrem, Integer.parseInt(formatter.format(p.getWhen())), filetypes,
                    commsgwords.length);
            cnt++;
        }
    }

    repository.close();
    return cnt;
}

From source file:models.PullRequest.java

License:Apache License

static private ObjectId getBlobId(Repository repo, String rev, String path) throws IOException {
    if (StringUtils.isEmpty(rev)) {
        throw new IllegalArgumentException("rev must not be empty");
    }//  w  ww.  ja v a 2 s  .  c om
    RevTree tree = new RevWalk(repo).parseTree(repo.resolve(rev));
    TreeWalk tw = TreeWalk.forPath(repo, path, tree);
    if (tw == null) {
        return null;
    }
    return tw.getObjectId(0);
}

From source file:neembuu.uploader.zip.generator.UpdaterGenerator.java

License:Apache License

/**
 * Populate all the files to update, if the system should update.
 *///from  w w  w.  j a  v a 2s . c  o  m
private boolean populateDiff() {
    try {
        git.fetch().call();
        Repository repo = git.getRepository();
        ObjectId fetchHead = repo.resolve("FETCH_HEAD^{tree}");
        ObjectId head = repo.resolve("HEAD^{tree}");

        ObjectReader reader = repo.newObjectReader();
        CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
        oldTreeIter.reset(reader, head);
        CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
        newTreeIter.reset(reader, fetchHead);
        List<DiffEntry> diffs = git.diff().setShowNameAndStatusOnly(true).setNewTree(newTreeIter)
                .setOldTree(oldTreeIter).call();

        if (diffs.isEmpty()) {
            System.out.println("No diff");
            return false;
        } else {
            return true;
        }
    } catch (GitAPIException | IOException ex) {
        Logger.getLogger(UpdaterGenerator.class.getName()).log(Level.SEVERE, null, ex);
    }
    return true;//assume true
}