ソースを参照

Fix 'status' in newly initialized trees.

Jelmer Vernooij 9 年 前
コミット
3004c894a6
3 ファイル変更16 行追加1 行削除
  1. 3 0
      NEWS
  2. 6 1
      dulwich/porcelain.py
  3. 7 0
      dulwich/tests/test_porcelain.py

+ 3 - 0
NEWS

@@ -8,6 +8,9 @@
   * Support missing empty line after headers in Git commits and tags.
     (Nicolas Dandrimont, #413)
 
+  * Fix `dulwich.porcelain.status` when used in empty trees.
+    (Jelmer Vernooij, #415)
+
 0.12.0	2015-12-13
 
  IMPROVEMENTS

+ 6 - 1
dulwich/porcelain.py

@@ -663,7 +663,12 @@ def get_tree_changes(repo):
             'delete': [],
             'modify': [],
         }
-        for change in index.changes_from_tree(r.object_store, r[b'HEAD'].tree):
+        try:
+            tree_id = r[b'HEAD'].tree
+        except KeyError:
+            tree_id = None
+
+        for change in index.changes_from_tree(r.object_store, tree_id):
             if not change[0][0]:
                 tracked_changes['add'].append(change[0][1])
             elif not change[0][1]:

+ 7 - 0
dulwich/tests/test_porcelain.py

@@ -528,6 +528,13 @@ class PullTests(PorcelainTestCase):
 
 class StatusTests(PorcelainTestCase):
 
+    def test_empty(self):
+        results = porcelain.status(self.repo)
+        self.assertEquals(
+            {'add': [], 'delete': [], 'modify': []},
+            results.staged)
+        self.assertEquals([], results.unstaged)
+
     def test_status(self):
         """Integration test for `status` functionality."""