diff options
Diffstat (limited to 'lib/git/index')
-rw-r--r-- | lib/git/index/base.py | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/git/index/base.py b/lib/git/index/base.py index 48b2d766..06437702 100644 --- a/lib/git/index/base.py +++ b/lib/git/index/base.py @@ -66,6 +66,7 @@ from fun import ( ) from gitdb.base import IStream +from gitdb.db import MemoryDB __all__ = ( 'IndexFile', 'CheckoutError' ) @@ -502,10 +503,13 @@ class IndexFile(LazyMixin, diff.Diffable, Serializable): if not self.entries: raise ValueError("Cannot write empty index") - # TODO: use memory db, this helps to prevent IO if the resulting tree - # already exists + mdb = MemoryDB() entries = self._entries_sorted() - binsha, tree_items = write_tree_from_cache(entries, self.repo.odb, slice(0, len(entries))) + binsha, tree_items = write_tree_from_cache(entries, mdb, slice(0, len(entries))) + + # copy changed trees only + mdb.stream_copy(mdb.sha_iter(), self.repo.odb) + # note: additional deserialization could be saved if write_tree_from_cache # would return sorted tree entries |