I'm trying to get my hands on the HEAD commit with JGit:
val builder = new FileRepositoryBuilder() val repo = builder.setGitDir(new File("/www/test-repo")) .readEnvironment() .findGitDir() .build() val walk: RevWalk = new RevWalk(repo, 100) val head: ObjectId = repo.resolve(Constants.HEAD) val headCommit: RevCommit = walk.parseCommit(head)
I find that it opens the repo fine, but head
value is set to null
. I wonder why it can't find HEAD?
I'm reading this documentation: http://wiki.eclipse.org/JGit/User_Guide
The repository is constructed just like the doc says, and the RevWalk
as well. I'm using the latest version of JGit which is 2.0.0.201206130900-r
from http://download.eclipse.org/jgit/maven.
My question: what do I need to change in my code to get JGit to return actual instances of RevCommit
instead of null
like it now does?
Update: This code:
val git = new Git(repo) val logs: Iterable[RevCommit] = git.log().call().asInstanceOf[Iterable[RevCommit]]
Gives me this exception: No HEAD exists and no explicit starting revision was specified
The exception is odd, because a simple git rev-parse HEAD
tells me 0b0e8bf2cae9201f30833d93cc248986276a4d75
, which means there is a HEAD in the repository. I've tried different repositories, mine and from other people.
JGit is a lightweight, pure Java library implementation of the Git version control system – including repository access routines, network protocols, and core version control algorithms. JGit is a relatively full-featured implementation of Git written in Java and is widely used in the Java community.
Walks a commit graph and produces the matching commits in order. A RevWalk instance can only be used once to generate results. Running a second time requires creating a new RevWalk instance, or invoking reset() before starting again.
You need to point to the Git metadata directory (probably /www/test-repo/.git
) when you call setGitDir
, not to the working directory (/www/test-repo
).
I have to admit I'm not sure what findGitDir
is supposed to do, but I've run into this problem before and specifying the .git
directory worked.
For the completeness sake, here is a fully working example how to get the hash for the HEAD commit:
public String getHeadName(Repository repo) { String result = null; try { ObjectId id = repo.resolve(Constants.HEAD); result = id.getName(); } catch (IOException e) { e.printStackTrace(); } return result; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With