diff options
author | Sascha Silbe <sascha-pgp@silbe.org> | 2011-10-11 22:01:05 (GMT) |
---|---|---|
committer | Sascha Silbe <sascha-pgp@silbe.org> | 2011-10-11 22:01:05 (GMT) |
commit | d249b8c9a8627fcf65a219ea5512ad5dae3673b6 (patch) | |
tree | a651cc56e6d3cc185e903582429d1f8ca70cd54d | |
parent | d8e3d402038074fbf4791b827c7c260f6dcf1d20 (diff) |
Fix metadata-only updates for Sugar v2 API
path='' means the caller wants to update only the metadata and "inherit" the
data from the previous version.
-rw-r--r-- | gdatastore/datastore.py | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/gdatastore/datastore.py b/gdatastore/datastore.py index 3b77828..e85cc4f 100644 --- a/gdatastore/datastore.py +++ b/gdatastore/datastore.py @@ -268,7 +268,7 @@ class DBusApiSugarV2(dbus.service.Object): parent = latest_versions[0] object_id = parent['tree_id'], parent['version_id'] - if self._compare_checksums(parent, file_path): + if self._check_identical(parent, file_path): self._internal_api.change_metadata(object_id, props) return success_cb(uid, None) @@ -366,19 +366,22 @@ class DBusApiSugarV2(dbus.service.Object): return self._internal_api.find({'tree_id': uid}, {'limit': 1, 'order_by': ['+timestamp']})[0] - def _compare_checksums(self, parent, child_data_path): + def _check_identical(self, parent, child_data_path): + """Check whether the new version contains the same data as the parent + + If child_data_path is empty, but the parent contains data, that's + interpreted as wanting to do a metadata-only update (emulating + sugar-datastore behaviour). + """ parent_object_id = (parent['tree_id'], parent['version_id']) parent_data_path = self._internal_api.get_data_path(parent_object_id) - if bool(child_data_path) ^ bool(parent_data_path): - return False - elif not child_data_path: + if not child_data_path: return True + elif child_data_path and not parent_data_path: + return False + # TODO: compare checksums? return False - parent_checksum = self._internal_api.get_data_checksum( - parent_object_id) - child_checksum = calculate_checksum(child_data_path) - return parent_checksum == child_checksum def __change_metadata_cb(self, (tree_id, version_id), metadata): self.Updated(tree_id) |