1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
7 #include "base/logging.h"
8 #include "base/strings/stringprintf.h"
9 #include "chrome/browser/sync_file_system/file_change.h"
11 namespace sync_file_system
{
13 FileChange::FileChange(
15 SyncFileType file_type
)
17 file_type_(file_type
) {}
19 std::string
FileChange::DebugString() const {
20 const char* change_string
= nullptr;
22 case FILE_CHANGE_ADD_OR_UPDATE
:
23 change_string
= "ADD_OR_UPDATE";
25 case FILE_CHANGE_DELETE
:
26 change_string
= "DELETE";
29 const char* type_string
= "UNKNOWN";
30 switch (file_type()) {
31 case SYNC_FILE_TYPE_FILE
:
34 case SYNC_FILE_TYPE_DIRECTORY
:
35 type_string
= "DIRECTORY";
37 case SYNC_FILE_TYPE_UNKNOWN
:
38 type_string
= "UNKNOWN";
41 return base::StringPrintf("%s:%s", change_string
, type_string
);
44 FileChangeList::FileChangeList() {}
45 FileChangeList::~FileChangeList() {}
47 void FileChangeList::Update(const FileChange
& new_change
) {
49 list_
.push_back(new_change
);
53 FileChange
& last
= list_
.back();
54 if (last
.IsFile() != new_change
.IsFile()) {
55 list_
.push_back(new_change
);
59 if (last
.change() == new_change
.change())
62 // ADD + DELETE on directory -> revert
63 if (!last
.IsFile() && last
.IsAddOrUpdate() && new_change
.IsDelete()) {
68 // DELETE + ADD/UPDATE -> ADD/UPDATE
69 // ADD/UPDATE + DELETE -> DELETE
73 FileChangeList
FileChangeList::PopAndGetNewList() const {
74 FileChangeList changes
;
75 changes
.list_
= this->list_
;
76 changes
.list_
.pop_front();
80 std::string
FileChangeList::DebugString() const {
81 std::ostringstream ss
;
83 for (size_t i
= 0; i
< list_
.size(); ++i
)
84 ss
<< list_
[i
].DebugString() << ", ";
89 } // namespace sync_file_system