summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-11-11 17:44:57 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2013-11-22 13:49:25 +0000
commit65fc7474c12b7b0fccd57810ba4f06d2fbca895a (patch)
treef8b5791cce76424175ec7e5333ab42659db388dc
parent0b4e147009bffa7b720ee767633e3acf3bb68c3a (diff)
downloadmorph-65fc7474c12b7b0fccd57810ba4f06d2fbca895a.tar.gz
gitindex: Add GitIndex.set_to_tree(treeish) method
This is used to set the state of the index to that of a previously known commit. This is needed for the build without commit logic, so that commits generated are that of the last commit in the repository and anything uncommitted.
-rw-r--r--morphlib/gitindex.py4
-rw-r--r--morphlib/gitindex_tests.py9
2 files changed, 13 insertions, 0 deletions
diff --git a/morphlib/gitindex.py b/morphlib/gitindex.py
index d8de8824..7cac2311 100644
--- a/morphlib/gitindex.py
+++ b/morphlib/gitindex.py
@@ -97,3 +97,7 @@ class GitIndex(object):
for code, to_path, from_path in self._get_status():
if code not in (STATUS_UNTRACKED, STATUS_IGNORED):
yield code, to_path, from_path
+
+ def set_to_tree(self, treeish):
+ '''Modify the index to contain the contents of the treeish.'''
+ self._run_git('read-tree', treeish)
diff --git a/morphlib/gitindex_tests.py b/morphlib/gitindex_tests.py
index db1e0e9b..2dcb5003 100644
--- a/morphlib/gitindex_tests.py
+++ b/morphlib/gitindex_tests.py
@@ -54,3 +54,12 @@ class GitIndexTests(unittest.TestCase):
self.assertEqual(sorted(idx.get_uncommitted_changes()),
[('D ', 'foo', None)])
# 'D ' means not in the index, but in the working tree
+
+ def test_set_to_tree_alt_index(self):
+ gd = morphlib.gitdir.GitDirectory(self.dirname)
+ idx = gd.get_index(os.path.join(self.tempdir, 'index'))
+ # Read the HEAD commit into the index, which is the same as the
+ # working tree, so there are no uncommitted changes reported
+ # by status
+ idx.set_to_tree(gd.HEAD)
+ self.assertEqual(list(idx.get_uncommitted_changes()),[])