| Index: sync/syncable/write_transaction.cc
|
| diff --git a/sync/syncable/write_transaction.cc b/sync/syncable/write_transaction.cc
|
| index 09759b6194eccb7b47debe2ebe491aaecc21a78a..8a319ba9c9906b3fa188f1263bc885b94e98b9ea 100644
|
| --- a/sync/syncable/write_transaction.cc
|
| +++ b/sync/syncable/write_transaction.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "sync/syncable/directory.h"
|
| #include "sync/syncable/directory_change_delegate.h"
|
| +#include "sync/syncable/mutable_entry.h"
|
| #include "sync/syncable/transaction_observer.h"
|
| #include "sync/syncable/write_transaction_info.h"
|
|
|
| @@ -82,13 +83,15 @@ ModelTypeSet WriteTransaction::NotifyTransactionChangingAndEnding(
|
| ImmutableWriteTransactionInfo immutable_write_transaction_info(
|
| &write_transaction_info);
|
| DirectoryChangeDelegate* const delegate = directory_->kernel_->delegate;
|
| + std::vector<int64> entry_changed;
|
| if (writer_ == syncable::SYNCAPI) {
|
| delegate->HandleCalculateChangesChangeEventFromSyncApi(
|
| - immutable_write_transaction_info, this);
|
| + immutable_write_transaction_info, this, &entry_changed);
|
| } else {
|
| delegate->HandleCalculateChangesChangeEventFromSyncer(
|
| - immutable_write_transaction_info, this);
|
| + immutable_write_transaction_info, this, &entry_changed);
|
| }
|
| + UpdateTransactionVersion(entry_changed);
|
|
|
| ModelTypeSet models_with_changes =
|
| delegate->HandleTransactionEndingChangeEvent(
|
| @@ -107,6 +110,22 @@ void WriteTransaction::NotifyTransactionComplete(
|
| models_with_changes);
|
| }
|
|
|
| +void WriteTransaction::UpdateTransactionVersion(
|
| + const std::vector<int64>& entry_changed) {
|
| + syncer::ModelTypeSet type_seen;
|
| + for (uint32 i = 0; i < entry_changed.size(); ++i) {
|
| + MutableEntry entry(this, GET_BY_HANDLE, entry_changed[i]);
|
| + if (entry.good()) {
|
| + ModelType type = GetModelTypeFromSpecifics(entry.Get(SPECIFICS));
|
| + if (!type_seen.Has(type)) {
|
| + directory_->IncrementTransactionVersion(type);
|
| + type_seen.Put(type);
|
| + }
|
| + entry.Put(TRANSACTION_VERSION, directory_->GetTransactionVersion(type));
|
| + }
|
| + }
|
| +}
|
| +
|
| WriteTransaction::~WriteTransaction() {
|
| const ImmutableEntryKernelMutationMap& mutations = RecordMutations();
|
| directory()->CheckInvariantsOnTransactionClose(this, mutations.Get());
|
|
|