From 9a6a433576c8b1cedb5f3aff9cfecb8217881ddf Mon Sep 17 00:00:00 2001 From: Jens Baumgart Date: Mon, 9 Aug 2010 11:14:38 +0200 Subject: [PATCH] Fix NPE on commit in empty Repository NPE occured when committing in an empty repository. Bug: 321858 Change-Id: Ibddb056c32c14c1444785501c43b95fdf64884b1 Signed-off-by: Jens Baumgart --- .../src/org/eclipse/jgit/lib/IndexDiff.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java index d4e6ac9824..a721f4b663 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java @@ -53,6 +53,7 @@ import org.eclipse.jgit.dircache.DirCacheIterator; import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.AbstractTreeIterator; +import org.eclipse.jgit.treewalk.EmptyTreeIterator; import org.eclipse.jgit.treewalk.TreeWalk; import org.eclipse.jgit.treewalk.WorkingTreeIterator; import org.eclipse.jgit.treewalk.filter.TreeFilter; @@ -100,6 +101,7 @@ public class IndexDiff { * @param repository * @param revstr * symbolic name e.g. HEAD + * An EmptyTreeIterator is used if revstr cannot be resolved. * @param workingTreeIterator * iterator for working directory * @throws IOException @@ -108,7 +110,10 @@ public class IndexDiff { WorkingTreeIterator workingTreeIterator) throws IOException { this.repository = repository; ObjectId objectId = repository.resolve(revstr); - tree = new RevWalk(repository).parseTree(objectId); + if (objectId != null) + tree = new RevWalk(repository).parseTree(objectId); + else + tree = null; this.initialWorkingTreeIterator = workingTreeIterator; } @@ -117,7 +122,7 @@ public class IndexDiff { * * @param repository * @param objectId - * tree id + * tree id. If null, an EmptyTreeIterator is used. * @param workingTreeIterator * iterator for working directory * @throws IOException @@ -125,10 +130,14 @@ public class IndexDiff { public IndexDiff(Repository repository, ObjectId objectId, WorkingTreeIterator workingTreeIterator) throws IOException { this.repository = repository; - tree = new RevWalk(repository).parseTree(objectId); + if (objectId != null) + tree = new RevWalk(repository).parseTree(objectId); + else + tree = null; this.initialWorkingTreeIterator = workingTreeIterator; } + /** * Run the diff operation. Until this is called, all lists will be empty * @@ -142,7 +151,10 @@ public class IndexDiff { treeWalk.reset(); treeWalk.setRecursive(true); // add the trees (tree, dirchache, workdir) - treeWalk.addTree(tree); + if (tree != null) + treeWalk.addTree(tree); + else + treeWalk.addTree(new EmptyTreeIterator()); treeWalk.addTree(new DirCacheIterator(dirCache)); treeWalk.addTree(initialWorkingTreeIterator); treeWalk.setFilter(TreeFilter.ANY_DIFF); -- 2.39.5