]> source.dussan.org Git - jgit.git/commitdiff
Fix NPE on commit in empty Repository 67/1267/1
authorJens Baumgart <jens.baumgart@sap.com>
Mon, 9 Aug 2010 09:14:38 +0000 (11:14 +0200)
committerJens Baumgart <jens.baumgart@sap.com>
Mon, 9 Aug 2010 09:14:38 +0000 (11:14 +0200)
NPE occured when committing in an empty repository.

Bug: 321858
Change-Id: Ibddb056c32c14c1444785501c43b95fdf64884b1
Signed-off-by: Jens Baumgart <jens.baumgart@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

index d4e6ac982405c3e7840a818f9d313493c53d7a97..a721f4b663a73e1b8b969ec7fc509cf4a8712e4b 100644 (file)
@@ -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 <code>revstr</code> 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);