| OLD | NEW |
| 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/sync/engine/build_and_process_conflict_sets_command.h" | 5 #include "chrome/browser/sync/engine/build_and_process_conflict_sets_command.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <sstream> | 8 #include <sstream> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 // 4. Use the preparer to move things to an initial starting state where no | 211 // 4. Use the preparer to move things to an initial starting state where no |
| 212 // names collide, and nothing in the set is a child of anything else. If | 212 // names collide, and nothing in the set is a child of anything else. If |
| 213 // we've correctly calculated the set, the server tree is valid and no | 213 // we've correctly calculated the set, the server tree is valid and no |
| 214 // changes have occurred locally we should be able to apply updates from this | 214 // changes have occurred locally we should be able to apply updates from this |
| 215 // state. | 215 // state. |
| 216 TransactionalUpdateEntryPreparer preparer; | 216 TransactionalUpdateEntryPreparer preparer; |
| 217 preparer.PrepareEntries(trans, update_set); | 217 preparer.PrepareEntries(trans, update_set); |
| 218 | 218 |
| 219 // 5. Use the usual apply updates from the special start state we've just | 219 // 5. Use the usual apply updates from the special start state we've just |
| 220 // prepared. | 220 // prepared. |
| 221 UpdateApplicator applicator(session, handles.begin(), handles.end()); | 221 UpdateApplicator applicator(session->resolver(), handles.begin(), |
| 222 handles.end()); |
| 222 while (applicator.AttemptOneApplication(trans)) { | 223 while (applicator.AttemptOneApplication(trans)) { |
| 223 // Keep going till all updates are applied. | 224 // Keep going till all updates are applied. |
| 224 } | 225 } |
| 225 if (!applicator.AllUpdatesApplied()) { | 226 if (!applicator.AllUpdatesApplied()) { |
| 226 LOG(ERROR) << "Transactional Apply Failed, Rolling back."; | 227 LOG(ERROR) << "Transactional Apply Failed, Rolling back."; |
| 227 // We have to move entries into the temp dir again. e.g. if a swap was in a | 228 // We have to move entries into the temp dir again. e.g. if a swap was in a |
| 228 // set with other failing updates, the swap may have gone through, meaning | 229 // set with other failing updates, the swap may have gone through, meaning |
| 229 // the roll back needs to be transactional. But as we're going to a known | 230 // the roll back needs to be transactional. But as we're going to a known |
| 230 // good state we should always succeed. | 231 // good state we should always succeed. |
| 231 preparer.PrepareEntries(trans, update_set); | 232 preparer.PrepareEntries(trans, update_set); |
| 232 | 233 |
| 233 // Rollback all entries. | 234 // Rollback all entries. |
| 234 for (size_t i = 0; i < rollback_data.size(); ++i) { | 235 for (size_t i = 0; i < rollback_data.size(); ++i) { |
| 235 CHECK(RollbackEntry(trans, &rollback_data[i])); | 236 CHECK(RollbackEntry(trans, &rollback_data[i])); |
| 236 } | 237 } |
| 237 return false; // Don't save progress -- we just undid it. | 238 return false; // Don't save progress -- we just undid it. |
| 238 } | 239 } |
| 239 applicator.SaveProgressIntoSessionState(); | 240 applicator.SaveProgressIntoSessionState(session); |
| 240 return true; | 241 return true; |
| 241 } | 242 } |
| 242 | 243 |
| 243 void BuildAndProcessConflictSetsCommand::BuildConflictSets( | 244 void BuildAndProcessConflictSetsCommand::BuildConflictSets( |
| 244 syncable::BaseTransaction* trans, | 245 syncable::BaseTransaction* trans, |
| 245 ConflictResolutionView* view) { | 246 ConflictResolutionView* view) { |
| 246 view->CleanupSets(); | 247 view->CleanupSets(); |
| 247 set<syncable::Id>::iterator i = view->CommitConflictsBegin(); | 248 set<syncable::Id>::iterator i = view->CommitConflictsBegin(); |
| 248 while (i != view->CommitConflictsEnd()) { | 249 while (i != view->CommitConflictsEnd()) { |
| 249 syncable::Entry entry(trans, syncable::GET_BY_ID, *i); | 250 syncable::Entry entry(trans, syncable::GET_BY_ID, *i); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 return; | 433 return; |
| 433 LocallyDeletedPathChecker checker; | 434 LocallyDeletedPathChecker checker; |
| 434 if (!checker.CausingConflict(parent, *entry)) | 435 if (!checker.CausingConflict(parent, *entry)) |
| 435 return; | 436 return; |
| 436 view->MergeSets(entry->Get(syncable::ID), parent.Get(syncable::ID)); | 437 view->MergeSets(entry->Get(syncable::ID), parent.Get(syncable::ID)); |
| 437 CrawlDeletedTreeMergingSets(trans, parent, view, checker); | 438 CrawlDeletedTreeMergingSets(trans, parent, view, checker); |
| 438 } | 439 } |
| 439 } | 440 } |
| 440 | 441 |
| 441 } // namespace browser_sync | 442 } // namespace browser_sync |
| OLD | NEW |