Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to obtain the RevCommit or ObjectId from a SHA1 ID string with JGit?

Tags:

sha1

jgit

This question is the inverse of this question: JGit how do i get the SHA1 from a RevCommit?.

If I am given the SHA1 ID of a particular commit as a string, how can I obtain the ObjectId or associated RevCommit in JGit?

Here is a possible answer, which iterates through all RevCommits:

RevCommit findCommit(String SHAId)
{
    Iterable<RevCommit> commits = git_.log().call();    
    for (RevCommit commit: commits)
    {
        if (commit.getName().equals(SHAId))
            return commit;
    }    
    return null;
}

Is there anything better than this implementation above?

like image 863
modulitos Avatar asked Sep 10 '14 00:09

modulitos


2 Answers

It is probably easier to first convert the string into an ObjectId and then have the RevWalk look it up.

ObjectId commitId = ObjectId.fromString("ab434...");
try (RevWalk revWalk = new RevWalk(repository)) {
  RevCommit commit = revWalk.parseCommit(commitId);
}
like image 196
Rüdiger Herrmann Avatar answered Oct 31 '22 19:10

Rüdiger Herrmann


Notice that RevWalk is now auto-closable, so you can also use the try-with-resources statement:

try (RevWalk revWalk = new RevWalk(repository)) {
    RevCommit commit = revWalk.parseCommit(commitId);
}
like image 3
Mincong Huang Avatar answered Oct 31 '22 20:10

Mincong Huang