Jgit RevWalk.parseCommit () throw MissingObjectException

Tengo un repository con alguna confirmación de testing (todo en la twig pnetworkingeterminada). Usando el command JGit log, puedo ver estos commit (por ejemplo):

RepositoryBuilder builder = new RepositoryBuilder(); Repository repository = builder.setWorkTree("/tmp/myworkingdir").readEnvironment().findGitDir().build(); Git git = new Git(repository); for (RevCommit commit : git.log().call()) { System.out.println("commit: " + commit.getId()); } 

Resultado:

 commit: commit f34a848371ff334b2e85aa16fbf9b871d028b443 1371652639 ----sp commit: commit 33603f8c1c47712d45eb0db4b1827bbd113c2428 1371652639 ----sp commit: commit d52bd5c768263a957d99975f5482020ffc3434d5 1371652639 ----sp 

Pero cuando bash get un RevCommit desde String SHA1, falla en la última línea de este fragment:

 ObjectId revid = repository.resolve("33603f8c1c47712d45eb0db4b1827bbd113c2428"); RevWalk revWalk = new RevWalk(repository); RevCommit commit = revWalk.parseCommit(revid); 

Excepción:

 org.eclipse.jgit.errors.MissingObjectException: Missing unknown 33603f8c1c47712d45eb0db4b1827bbd113c2428 at org.eclipse.jgit.storage.file.WindowCursor.open(WindowCursor.java:126) at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:229) at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:817) at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:730) 

Qué estoy haciendo mal ?

Solución Init del repository estaba mal en la parte de acceso.

Bueno, mi error … Inicial del repository fue incorrecto para el acceso posterior (un subdirectory en lugar de la raíz). Pero hubiera esperado otro error …

Aquí un fragment que muestra el problema:

  String wpath = "/tmp/test-git"; ArrayList<String> commits = new ArrayList<String>(); // get list of commit { File gitDir = new File(wpath); RepositoryBuilder builder = new RepositoryBuilder(); Repository repository = builder.setWorkTree(gitDir) .readEnvironment().findGitDir().build(); Git git = new Git(repository); for (RevCommit commit : git.log().call()) { String cid = commit.getId().toString().split(" ")[1]; commits.add(cid); } Collections.shuffle(commits); } // Random access { File gitDir = new File(wpath + "/subdir"); RepositoryBuilder builder = new RepositoryBuilder(); Repository repository = builder.setWorkTree(gitDir) .readEnvironment().findGitDir().build(); for (String cid : commits) { RevCommit commit = CommitUtils.getCommit(repository, cid); assertEquals(commit.getId().toString().split(" ")[1], cid); } } 

No debería funcionar ya que el repository se inicializó erróneamente (en la segunda parte), pero el error debería indicarlo …: /