JGit and finding the Head
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 22.214.171.124206130900-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.
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.