| Index: sync/syncable/mutable_entry.cc
|
| diff --git a/sync/syncable/mutable_entry.cc b/sync/syncable/mutable_entry.cc
|
| index 869320f33e20aa487ebbc4ecaefc015ed9f1d90e..5090ad1a9116739a00d89ae6f6952ec9c765acaa 100644
|
| --- a/sync/syncable/mutable_entry.cc
|
| +++ b/sync/syncable/mutable_entry.cc
|
| @@ -5,6 +5,7 @@
|
| #include "sync/syncable/mutable_entry.h"
|
|
|
| #include "base/memory/scoped_ptr.h"
|
| +#include "sync/internal_api/public/base/node_ordinal.h"
|
| #include "sync/syncable/directory.h"
|
| #include "sync/syncable/scoped_index_updater.h"
|
| #include "sync/syncable/scoped_kernel_lock.h"
|
| @@ -41,6 +42,7 @@ void MutableEntry::Init(WriteTransaction* trans, const Id& parent_id,
|
| kernel->put(MTIME, now);
|
| // We match the database defaults here
|
| kernel->put(BASE_VERSION, CHANGES_VERSION);
|
| + kernel->put(SERVER_ORDINAL_IN_PARENT, NodeOrdinal::CreateInitialOrdinal());
|
| if (!trans->directory()->InsertEntry(trans, kernel.get())) {
|
| return; // We failed inserting, nothing more to do.
|
| }
|
| @@ -66,6 +68,7 @@ MutableEntry::MutableEntry(WriteTransaction* trans, CreateNewUpdateItem,
|
| kernel->put(ID, id);
|
| kernel->put(META_HANDLE, trans->directory_->NextMetahandle());
|
| kernel->mark_dirty(trans->directory_->kernel_->dirty_metahandles);
|
| + kernel->put(SERVER_ORDINAL_IN_PARENT, NodeOrdinal::CreateInitialOrdinal());
|
| kernel->put(IS_DEL, true);
|
| // We match the database defaults here
|
| kernel->put(BASE_VERSION, CHANGES_VERSION);
|
| @@ -146,13 +149,7 @@ bool MutableEntry::Put(Int64Field field, const int64& value) {
|
| write_transaction_->SaveOriginal(kernel_);
|
| if (kernel_->ref(field) != value) {
|
| ScopedKernelLock lock(dir());
|
| - if (SERVER_POSITION_IN_PARENT == field) {
|
| - ScopedIndexUpdater<ParentIdAndHandleIndexer> updater(lock, kernel_,
|
| - dir()->kernel_->parent_id_child_index);
|
| - kernel_->put(field, value);
|
| - } else {
|
| - kernel_->put(field, value);
|
| - }
|
| + kernel_->put(field, value);
|
| kernel_->mark_dirty(dir()->kernel_->dirty_metahandles);
|
| }
|
| return true;
|
| @@ -190,6 +187,24 @@ bool MutableEntry::Put(IdField field, const Id& value) {
|
| return true;
|
| }
|
|
|
| +bool MutableEntry::Put(OrdinalField field, const NodeOrdinal& value) {
|
| + DCHECK(kernel_);
|
| + DCHECK(value.IsValid());
|
| + write_transaction_->SaveOriginal(kernel_);
|
| + if(!kernel_->ref(field).Equals(value)) {
|
| + ScopedKernelLock lock(dir());
|
| + if (SERVER_ORDINAL_IN_PARENT == field) {
|
| + ScopedIndexUpdater<ParentIdAndHandleIndexer> updater(
|
| + lock, kernel_, dir()->kernel_->parent_id_child_index);
|
| + kernel_->put(field, value);
|
| + } else {
|
| + kernel_->put(field, value);
|
| + }
|
| + kernel_->mark_dirty(dir()->kernel_->dirty_metahandles);
|
| + }
|
| + return true;
|
| +}
|
| +
|
| void MutableEntry::PutParentIdPropertyOnly(const Id& parent_id) {
|
| write_transaction_->SaveOriginal(kernel_);
|
| dir()->ReindexParentId(write_transaction(), kernel_, parent_id);
|
|
|