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:br.com.metricminer2.scm.GitRepository.java

License:Apache License

@Override
public Commit getCommit(String id) {
    Git git = null;/*w  ww .ja v a 2  s  .  c o m*/
    try {
        git = Git.open(new File(path));
        Repository repo = git.getRepository();

        Iterable<RevCommit> commits = git.log().add(repo.resolve(id)).call();
        Commit theCommit = null;

        for (RevCommit jgitCommit : commits) {

            Developer author = new Developer(jgitCommit.getAuthorIdent().getName(),
                    jgitCommit.getAuthorIdent().getEmailAddress());
            Developer committer = new Developer(jgitCommit.getCommitterIdent().getName(),
                    jgitCommit.getCommitterIdent().getEmailAddress());

            String msg = jgitCommit.getFullMessage().trim();
            String hash = jgitCommit.getName().toString();
            long epoch = jgitCommit.getCommitTime();
            String parent = (jgitCommit.getParentCount() > 0) ? jgitCommit.getParent(0).getName().toString()
                    : "";

            GregorianCalendar date = new GregorianCalendar();
            date.setTime(new Date(epoch * 1000L));

            theCommit = new Commit(hash, author, committer, date, msg, parent);

            List<DiffEntry> diffsForTheCommit = diffsForTheCommit(repo, jgitCommit);
            if (diffsForTheCommit.size() > MAX_NUMBER_OF_FILES_IN_A_COMMIT) {
                log.error("commit " + id + " has more than files than the limit");
                throw new RuntimeException("commit " + id + " too big, sorry");
            }

            for (DiffEntry diff : diffsForTheCommit) {

                ModificationType change = Enum.valueOf(ModificationType.class, diff.getChangeType().toString());

                String oldPath = diff.getOldPath();
                String newPath = diff.getNewPath();

                String diffText = "";
                String sc = "";
                if (diff.getChangeType() != ChangeType.DELETE) {
                    diffText = getDiffText(repo, diff);
                    sc = getSourceCode(repo, diff);
                }

                if (diffText.length() > MAX_SIZE_OF_A_DIFF) {
                    log.error("diff for " + newPath + " too big");
                    diffText = "-- TOO BIG --";
                }

                theCommit.addModification(oldPath, newPath, change, diffText, sc);

            }

            break;
        }

        return theCommit;
    } catch (Exception e) {
        throw new RuntimeException("error detailing " + id + " in " + path, e);
    } finally {
        if (git != null)
            git.close();
    }
}

From source file:br.com.metricminer2.scm.GitRepository.java

License:Apache License

private List<DiffEntry> diffsForTheCommit(Repository repo, RevCommit commit)
        throws IOException, AmbiguousObjectException, IncorrectObjectTypeException {

    AnyObjectId currentCommit = repo.resolve(commit.getName());
    AnyObjectId parentCommit = commit.getParentCount() > 0 ? repo.resolve(commit.getParent(0).getName()) : null;

    DiffFormatter df = new DiffFormatter(DisabledOutputStream.INSTANCE);
    df.setBinaryFileThreshold(2 * 1024); // 2 mb max a file
    df.setRepository(repo);//w  w w . ja  va 2  s.  c om
    df.setDiffComparator(RawTextComparator.DEFAULT);
    df.setDetectRenames(true);
    List<DiffEntry> diffs = null;

    if (parentCommit == null) {
        RevWalk rw = new RevWalk(repo);
        diffs = df.scan(new EmptyTreeIterator(),
                new CanonicalTreeParser(null, rw.getObjectReader(), commit.getTree()));
        rw.release();
    } else {
        diffs = df.scan(parentCommit, currentCommit);
    }

    df.release();

    return diffs;
}

From source file:br.com.riselabs.cotonet.util.JDimeHelper.java

License:Open Source License

/**
 * Returns the merge scenarios from the 'ghanalysis' database (JDime database)
 * //from  ww  w  .j ava2  s .  c  o m
 * @param repositoryID
 * @param repo
 * @return
 * @throws IOException
 */
public static List<MergeScenario> getMergeScenarios(Integer repositoryID, Repository repo) throws IOException {
    List<MergeScenario> scenarios = new ArrayList<MergeScenario>();
    String sql = "select  " + "m.leftrevision \"left\", " + "m.baserevision \"base\", "
            + "m.rightrevision \"right\", " + "m.leftcommits \"nlcommits\"," + "m.rightcommits \"nrcommits\","
            + "l.commitid \"leftsha\"," + "b.commitid \"basesha\"," + "r.commitid \"rightsha\" "
            + "from mergescenario m, revision l, revision b, revision r " + "where m.leftrepo = " + repositoryID
            + " and m.rightrepo = " + repositoryID + " and m.diffstatsdone " + "and m.gitstatsdone "
            + "and m.commitstatsdone " + "and m.leftrevision=l.id " + "and m.baserevision=b.id "
            + "and m.rightrevision=r.id " + "and m.leftcommits > 0 " + "and m.rightcommits > 0";
    // + " limit ", max_scenarios, sep="";

    try {
        conn = Database.getConnection(dbname, dbuser, dbpass);
        st = conn.createStatement();
        rs = st.executeQuery(sql);
        while (rs.next()) {
            try (RevWalk w = new RevWalk(repo)) {
                RevCommit left = w.parseCommit(repo.resolve(rs.getString("leftsha")));
                RevCommit base = w.parseCommit(repo.resolve(rs.getString("basesha")));
                RevCommit right = w.parseCommit(repo.resolve(rs.getString("rightsha")));
                scenarios.add(new MergeScenario(repositoryID, base, left, right, null, null));
            }
        }
    } catch (SQLException e) {
        Logger.logStackTrace(e);
    } finally {
        try {
            rs.close();
            st.close();
            conn.close();
        } catch (SQLException e) {
            Logger.logStackTrace(e);
        }
    }

    return scenarios;
}

From source file:br.edu.ifpb.scm.api.loads.LoaderVersions.java

public static void teste2() throws IOException, GitAPIException {
    org.eclipse.jgit.api.Git git = org.eclipse.jgit.api.Git.open(PATH);
    org.eclipse.jgit.lib.Repository repository = git.getRepository();

    repository.findRef(URL);/*from  www  .  j a va 2  s  .  co m*/

    ObjectId oldHead = repository.resolve("HEAD~^{tree}");
    ObjectId newHead = repository.resolve("HEAD^{tree}");

    ObjectReader reader = repository.newObjectReader();
    CanonicalTreeParser oldTreeIter = new CanonicalTreeParser();
    //        ObjectId oldTree = git.getRepository().resolve("SHA-1{64c852a8fe9e3673aa381f95c4b0420986d1f925}");

    CanonicalTreeParser newTreeIter = new CanonicalTreeParser();
    //        ObjectId newTree = git.getRepository().resolve("SHA-1{12ae7a9960c49cfe68bdd5f7b0a58e1b3b0c6e56}");

    oldTreeIter.reset(reader, oldHead);
    newTreeIter.reset(reader, newHead);

    try (org.eclipse.jgit.api.Git g = new org.eclipse.jgit.api.Git(repository)) {
        List<DiffEntry> diffs = g.diff().setNewTree(newTreeIter).setOldTree(oldTreeIter).call();
        for (DiffEntry entry : diffs) {
            System.out.println("Entry: " + entry);
        }
    }

    //        DiffFormatter diffFormatter = new DiffFormatter(DisabledOutputStream.INSTANCE);
    //        diffFormatter.setRepository(git.getRepository());
    //        List<DiffEntry> entries = diffFormatter.scan(oldTreeIter, newTreeIter);
    //
    //        entries.stream().forEach((entry) -> {
    //            System.out.println(entry.getChangeType());
    //        });
}

From source file:co.bledo.gitmin.servlet.Review.java

License:Apache License

public Response commit(Request req) throws IOException, GitAPIException {
    String repoName = req.getParam("repo", "");
    String hash = req.getParam("hash", "");

    Git git = Git.open(new File(GitminConfig.getGitRepositoriesPath() + "/" + repoName));

    /*//from  w ww  .  j  a v  a2 s  .c o m
    ByteArrayOutputStream baos1 = new ByteArrayOutputStream();
    List<DiffEntry> diffTest = git.diff().setOutputStream(baos1)
    .setOldTree(getTreeIterator(git.getRepository(), hash))
    .setNewTree(getTreeIterator(git.getRepository(), hash + "^"))
    .call();
    System.out.println(baos1.toString());
    */

    RepositoryBuilder builder = new RepositoryBuilder();
    Repository repo = builder.setGitDir(new File(GitminConfig.getGitRepositoriesPath() + "/" + repoName))
            .readEnvironment().findGitDir().build();

    RevWalk rw = new RevWalk(repo);

    ObjectId hashOid = repo.resolve(hash);

    RevCommit commit = rw.parseCommit(hashOid);
    RevCommit parent = rw.parseCommit(commit.getParent(0).getId());

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    DiffFormatter df = new DiffFormatter(baos);
    df.setRepository(repo);
    df.setDiffComparator(RawTextComparator.DEFAULT);
    df.setDetectRenames(true);
    List<DiffEntry> diffs = df.scan(parent, commit);
    List<CommitInfo> commitInfos = new ArrayList<CommitInfo>();
    for (DiffEntry diff : diffs) {

        CommitInfo nfo = new CommitInfo();

        df.format(diff);

        nfo.diff = baos.toString();
        nfo.oldContents = getFileContent(repo, parent, diff.getOldPath());
        nfo.newContents = getFileContent(repo, parent, diff.getNewPath());
        nfo.newFile = diff.getNewPath();
        nfo.oldFile = diff.getOldPath();

        commitInfos.add(nfo);
    }

    VelocityResponse resp = VelocityResponse.newInstance(req, this);
    resp.assign("nfolist", commitInfos);
    return log.exit(resp);
}

From source file:co.bledo.gitmin.servlet.Review.java

License:Apache License

private AbstractTreeIterator getTreeIterator(Repository repo, String name) throws IOException {
    final ObjectId id = repo.resolve(name);
    if (id == null)
        throw new IllegalArgumentException(name);
    final CanonicalTreeParser p = new CanonicalTreeParser();
    final ObjectReader or = repo.newObjectReader();
    try {/*from  w  w w.  j av  a  2s .c o m*/
        p.reset(or, new RevWalk(repo).parseTree(id));
        return p;
    } finally {
        or.release();
    }
}

From source file:co.turnus.versioning.impl.GitVersioner.java

License:Open Source License

@Override
public Version getVersion(File file) {
    if (file == null) {
        return new SimpleFileVersioner().getVersion(file);
    }/* w w w  . jav a2  s  .c o m*/

    Repository repo = searchNearestRepository(file);
    if (repo != null) {
        try {
            ObjectId revId = repo.resolve(Constants.HEAD);
            Date mdofifDate = getLastModifiedDate(file, repo, revId);
            String revision = getRevision(revId);

            Version v = VersioningFactory.eINSTANCE.createVersion();
            v.setVersioningDate(new Date());
            v.setLastModificationDate(mdofifDate);
            v.setAttribute("versioner", NAME);
            v.setId(revision);
            return v;

        } catch (Exception e) {
        }
    }

    return new SimpleFileVersioner().getVersion(file);
}

From source file:co.turnus.versioning.impl.GitVersioner.java

License:Open Source License

private Repository searchNearestRepository(File file) {
    if (file == null) {
        return null;
    } else if (file.exists()) {
        try {/*from w  w  w . j a  va 2s  .com*/
            Repository repo = new FileRepositoryBuilder().findGitDir(file.getCanonicalFile()).build();
            ObjectId revision = repo.resolve(Constants.HEAD);
            if (revision != null) {
                return repo;
            }
        } catch (Exception e) {
        }
    }
    return searchNearestRepository(file.getParentFile());
}

From source file:com.amd.gerrit.plugins.manifestsubscription.ManifestSubscription.java

License:Open Source License

private VersionedManifests parseManifests(Project.NameKey p, String refName)
        throws IOException, JAXBException, ConfigInvalidException {

    Repository repo = gitRepoManager.openRepository(p);
    ObjectId commitId = repo.resolve(refName);
    MetaDataUpdate update = metaDataUpdateFactory.create(p);
    VersionedManifests vManifests = new VersionedManifests(refName);
    vManifests.load(update, commitId);/*from   w  w w . jav a  2  s.c o  m*/

    return vManifests;
}

From source file:com.amd.gerrit.plugins.manifestsubscription.Utilities.java

License:Open Source License

static ObjectId updateManifest(GitRepositoryManager gitRepoManager, MetaDataUpdate.Server metaDataUpdateFactory,
        ChangeHooks changeHooks, String projectName, String refName, Manifest manifest, String manifestSrc,
        String extraCommitMsg, String defaultBranchBase) throws JAXBException, IOException {
    Project.NameKey p = new Project.NameKey(projectName);
    Repository repo = gitRepoManager.openRepository(p);
    MetaDataUpdate update = metaDataUpdateFactory.create(p);
    ObjectId commitId = repo.resolve(refName);
    VersionedManifests vManifests = new VersionedManifests(refName);

    //TODO find a better way to detect no branch
    boolean refExists = true;
    try {/*from   ww  w  .j a  v a  2  s.  c o  m*/
        vManifests.load(update, commitId);
    } catch (Exception e) {
        refExists = false;
    }

    RevCommit commit = null;
    if (refExists) {
        Map<String, Manifest> entry = Maps.newHashMapWithExpectedSize(1);
        entry.put("default.xml", manifest);
        vManifests.setManifests(entry);
        vManifests.setSrcManifestRepo(manifestSrc);
        vManifests.setExtraCommitMsg(extraCommitMsg);
        commit = vManifests.commit(update);
    } else {
        if (defaultBranchBase == null)
            defaultBranchBase = "refs/heads/master";
        vManifests = new VersionedManifests(defaultBranchBase);
        ObjectId cid = repo.resolve(defaultBranchBase);
        try {
            vManifests.load(update, cid);
        } catch (ConfigInvalidException e) {
            e.printStackTrace();
        }
        Map<String, Manifest> entry = Maps.newHashMapWithExpectedSize(1);
        entry.put("default.xml", manifest);
        vManifests.setManifests(entry);
        commit = vManifests.commitToNewRef(update, refName);
    }

    // TODO this may be bug in the MetaDataUpdate or VersionedMetaData
    // May be related:
    // https://code.google.com/p/gerrit/issues/detail?id=2564
    // https://gerrit-review.googlesource.com/55540
    if (commit != null) {
        ObjectId parent = ObjectId.zeroId();

        if (commit.getParents().length > 0) {
            parent = commit.getParent(0).getId();
        }
        changeHooks.doRefUpdatedHook(new Branch.NameKey(p, refName), parent, commit.getId(), null);
        return commit.getId();
    } else {
        log.warn("Failing to commit manifest subscription update:" + "\n\tProject: " + projectName + "\n\tRef: "
                + refName);
    }

    return null;
}