Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Unified Diff: sync/engine/get_commit_ids.cc

Issue 1023843002: Sync: support implicit permanent folders in commits. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sync/engine/directory_commit_contribution_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sync/engine/get_commit_ids.cc
diff --git a/sync/engine/get_commit_ids.cc b/sync/engine/get_commit_ids.cc
index e02cce57019fb54bb2b536c29535ea3ded86c726..f87524d66c0b44f0f975054f189928b1426bf414 100644
--- a/sync/engine/get_commit_ids.cc
+++ b/sync/engine/get_commit_ids.cc
@@ -254,6 +254,8 @@ class Traversal {
const syncable::Directory::Metahandles& traversed,
syncable::Directory::Metahandles* result) const;
+ bool SupportsHierarchy(const syncable::Entry& item) const;
+
// Returns true if we've collected enough items.
bool IsFull() const;
@@ -288,6 +290,7 @@ bool Traversal::AddUncommittedParentsAndTheirPredecessors(
const std::set<int64>& ready_unsynced_set,
const syncable::Entry& item,
syncable::Directory::Metahandles* result) const {
+ DCHECK(SupportsHierarchy(item));
syncable::Directory::Metahandles dependencies;
syncable::Id parent_id = item.GetParentId();
@@ -393,6 +396,7 @@ bool Traversal::AddDeletedParents(
const syncable::Entry& item,
const syncable::Directory::Metahandles& traversed,
syncable::Directory::Metahandles* result) const {
+ DCHECK(SupportsHierarchy(item));
syncable::Directory::Metahandles dependencies;
syncable::Id parent_id = item.GetParentId();
@@ -448,6 +452,10 @@ bool Traversal::HaveItem(int64 handle) const {
return added_handles_.find(handle) != added_handles_.end();
}
+bool Traversal::SupportsHierarchy(const syncable::Entry& item) const {
+ return !item.GetParentId().IsNull();
+}
+
void Traversal::AppendManyToTraversal(
const syncable::Directory::Metahandles& handles) {
out_->insert(out_->end(), handles.begin(), handles.end());
@@ -472,17 +480,19 @@ void Traversal::AddCreatesAndMoves(
syncable::GET_BY_HANDLE,
metahandle);
if (!entry.GetIsDel()) {
- // We only commit an item + its dependencies if it and all its
- // dependencies are not in conflict.
- syncable::Directory::Metahandles item_dependencies;
- if (AddUncommittedParentsAndTheirPredecessors(
- ready_unsynced_set,
- entry,
- &item_dependencies)) {
- AddPredecessorsThenItem(ready_unsynced_set,
- entry,
- &item_dependencies);
- AppendManyToTraversal(item_dependencies);
+ if (SupportsHierarchy(entry)) {
+ // We only commit an item + its dependencies if it and all its
+ // dependencies are not in conflict.
+ syncable::Directory::Metahandles item_dependencies;
+ if (AddUncommittedParentsAndTheirPredecessors(ready_unsynced_set, entry,
+ &item_dependencies)) {
+ AddPredecessorsThenItem(ready_unsynced_set, entry,
+ &item_dependencies);
+ AppendManyToTraversal(item_dependencies);
+ }
+ } else {
+ // No hierarchy dependencies, just commit the item itself.
+ AppendToTraversal(metahandle);
}
}
}
@@ -515,13 +525,16 @@ void Traversal::AddDeletes(const std::set<int64>& ready_unsynced_set) {
metahandle);
if (entry.GetIsDel()) {
- syncable::Directory::Metahandles parents;
- if (AddDeletedParents(
- ready_unsynced_set, entry, deletion_list, &parents)) {
- // Append parents and chilren in top to bottom order.
- deletion_list.insert(deletion_list.end(),
- parents.begin(),
- parents.end());
+ if (SupportsHierarchy(entry)) {
+ syncable::Directory::Metahandles parents;
+ if (AddDeletedParents(ready_unsynced_set, entry, deletion_list,
+ &parents)) {
+ // Append parents and chilren in top to bottom order.
+ deletion_list.insert(deletion_list.end(), parents.begin(),
+ parents.end());
+ deletion_list.push_back(metahandle);
+ }
+ } else {
deletion_list.push_back(metahandle);
}
}
« no previous file with comments | « sync/engine/directory_commit_contribution_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698