summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel <marcel.beining@gmail.com>2019-02-08 11:44:33 +0100
committerSebastian Thiel <sebastian.thiel@icloud.com>2019-10-15 13:27:48 +0200
commit3face9018b70f1db82101bd5173c01e4d8d2b3bf (patch)
tree09d0f58875875753d14dadf8f1f02b0938ec1784
parent23b83cd6a10403b5fe478932980bdd656280844d (diff)
downloadgitpython-3face9018b70f1db82101bd5173c01e4d8d2b3bf.tar.gz
allow calling index.add, index.move and index.remove with single items
added testing for it closes #813
-rw-r--r--git/index/base.py46
-rw-r--r--git/test/test_index.py9
2 files changed, 37 insertions, 18 deletions
diff --git a/git/index/base.py b/git/index/base.py
index 04a3934d..c34fe78a 100644
--- a/git/index/base.py
+++ b/git/index/base.py
@@ -569,16 +569,23 @@ class IndexFile(LazyMixin, diff.Diffable, Serializable):
""" Split the items into two lists of path strings and BaseEntries. """
paths = []
entries = []
-
- for item in items:
- if isinstance(item, string_types):
- paths.append(self._to_relative_path(item))
- elif isinstance(item, (Blob, Submodule)):
- entries.append(BaseIndexEntry.from_blob(item))
- elif isinstance(item, BaseIndexEntry):
- entries.append(item)
- else:
- raise TypeError("Invalid Type: %r" % item)
+
+ if isinstance(items, string_types):
+ paths.append(self._to_relative_path(items))
+ elif isinstance(items, (Blob, Submodule)):
+ entries.append(BaseIndexEntry.from_blob(items))
+ elif isinstance(items, BaseIndexEntry):
+ entries.append(items)
+ else:
+ for item in items:
+ if isinstance(item, string_types):
+ paths.append(self._to_relative_path(item))
+ elif isinstance(item, (Blob, Submodule)):
+ entries.append(BaseIndexEntry.from_blob(item))
+ elif isinstance(item, BaseIndexEntry):
+ entries.append(item)
+ else:
+ raise TypeError("Invalid Type: %r" % item)
# END for each item
return (paths, entries)
@@ -801,13 +808,18 @@ class IndexFile(LazyMixin, diff.Diffable, Serializable):
"""Returns a list of repo-relative paths from the given items which
may be absolute or relative paths, entries or blobs"""
paths = []
- for item in items:
- if isinstance(item, (BaseIndexEntry, (Blob, Submodule))):
- paths.append(self._to_relative_path(item.path))
- elif isinstance(item, string_types):
- paths.append(self._to_relative_path(item))
- else:
- raise TypeError("Invalid item type: %r" % item)
+ if isinstance(items, (BaseIndexEntry, (Blob, Submodule))):
+ paths.append(self._to_relative_path(items.path))
+ elif isinstance(items, string_types):
+ paths.append(self._to_relative_path(items))
+ else:
+ for item in items:
+ if isinstance(item, (BaseIndexEntry, (Blob, Submodule))):
+ paths.append(self._to_relative_path(item.path))
+ elif isinstance(item, string_types):
+ paths.append(self._to_relative_path(item))
+ else:
+ raise TypeError("Invalid item type: %r" % item)
# END for each item
return paths
diff --git a/git/test/test_index.py b/git/test/test_index.py
index 11009239..ee48bae6 100644
--- a/git/test/test_index.py
+++ b/git/test/test_index.py
@@ -772,7 +772,14 @@ class TestIndex(TestBase):
orig_tree = commit.tree
self.assertEqual(index.write_tree(), orig_tree)
# END for each commit
-
+
+ @with_rw_repo('HEAD', bare=False)
+ def test_index_single_addremove(self, rw_repo):
+ path = osp.join('git', 'test', 'test_index.py')
+ self._assert_entries(rw_repo.index.add(path))
+ deleted_files = rw_repo.index.remove(path)
+ assert deleted_files
+
def test_index_new(self):
B = self.rorepo.tree("6d9b1f4f9fa8c9f030e3207e7deacc5d5f8bba4e")
H = self.rorepo.tree("25dca42bac17d511b7e2ebdd9d1d679e7626db5f")