Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gdatastore/datastore.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/gdatastore/datastore.py b/gdatastore/datastore.py
index 6dd2170..a33aca8 100644
--- a/gdatastore/datastore.py
+++ b/gdatastore/datastore.py
@@ -542,6 +542,7 @@ class InternalApi(object):
old_metadata = self._index.retrieve(object_id)['metadata']
metadata['creation_time'] = old_metadata['creation_time']
+ self._update_metadata_in_git(object_id, metadata)
self._index.store(object_id, metadata)
self._invoke_callbacks('change_metadata', object_id, metadata)
@@ -815,6 +816,19 @@ class InternalApi(object):
finally:
shutil.rmtree(index_dir)
+ def _update_metadata_in_git(self, object_id, metadata):
+ commit_message = self._format_commit_message(metadata)
+ tree_hash = self._get_tree_hash(object_id)
+ ref = _format_ref(*object_id)
+ commit_hash = self._git_call('commit-tree', ['-p', ref, tree_hash],
+ input=commit_message).strip()
+ self._git_call('update-ref', [ref, commit_hash])
+
+ def _get_tree_hash(self, object_id):
+ args = ['commit', _format_ref(*object_id)]
+ # First line of output contains tree hash
+ return self._git_call('cat-file', args).split('\n', 1)[0].split(' ')[1]
+
def _get_object_ids_from_git(self):
args = ['--sort=committerdate', '--format=%(refname)',
'refs/gdatastore/*/*']