From 24b65aac4290d6a1377679ea6e7be65aad23c648 Mon Sep 17 00:00:00 2001 From: Ilya Zverev Date: Thu, 24 Mar 2016 13:23:10 +0300 Subject: [PATCH] [editor] Review fixes --- editor/changeset_wrapper.cpp | 15 +++++++++++---- editor/changeset_wrapper.hpp | 6 +++--- editor/editor_tests/server_api_test.cpp | 4 ++++ editor/server_api.cpp | 2 +- editor/server_api.hpp | 1 + 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/editor/changeset_wrapper.cpp b/editor/changeset_wrapper.cpp index c8b7d26a5e..94c06f813e 100644 --- a/editor/changeset_wrapper.cpp +++ b/editor/changeset_wrapper.cpp @@ -255,26 +255,27 @@ void ChangesetWrapper::Delete(XMLFeature node) // Changeset id should be updated for every OSM server commit. node.SetAttribute("changeset", strings::to_string(m_changesetId)); m_api.DeleteElement(node); + m_deleted_types[GetTypeForFeature(node)]++; } -string ChangesetWrapper::TypeCountToString(TTypeCount const & typeCount) const +string ChangesetWrapper::TypeCountToString(TTypeCount const & typeCount) { if (typeCount.empty()) return string(); // Convert map to vector and sort pairs by count, descending. - vector> items; + vector> items; for (auto const & tc : typeCount) items.push_back(tc); sort(items.begin(), items.end(), - [](pair const & a, pair const & b) + [](pair const & a, pair const & b) { return a.second > b.second; }); ostringstream ss; - auto const limit = items.size() > 3 ? 3 : items.size(); + auto const limit = min(3UL, items.size()); for (auto i = 0; i < limit; ++i) { if (i > 0) @@ -321,6 +322,12 @@ string ChangesetWrapper::GetDescription() const result += "; "; result += "Updated " + TypeCountToString(m_modified_types); } + if (!m_deleted_types.empty()) + { + if (!result.empty()) + result += "; "; + result += "Deleted " + TypeCountToString(m_deleted_types); + } return result; } diff --git a/editor/changeset_wrapper.hpp b/editor/changeset_wrapper.hpp index c1d0d5583c..b199d8f095 100644 --- a/editor/changeset_wrapper.hpp +++ b/editor/changeset_wrapper.hpp @@ -19,7 +19,7 @@ struct ClientToken; class ChangesetWrapper { - using TTypeCount = map; + using TTypeCount = map; public: DECLARE_EXCEPTION(ChangesetWrapperException, RootException); @@ -64,10 +64,10 @@ private: static constexpr uint64_t kInvalidChangesetId = 0; uint64_t m_changesetId = kInvalidChangesetId; - // No m_deleted_types here, since we do not delete features. TTypeCount m_modified_types; TTypeCount m_created_types; - string TypeCountToString(TTypeCount const & typeCount) const; + TTypeCount m_deleted_types; + static string TypeCountToString(TTypeCount const & typeCount); string GetDescription() const; }; diff --git a/editor/editor_tests/server_api_test.cpp b/editor/editor_tests/server_api_test.cpp index 83d6e652f9..4962155e2c 100644 --- a/editor/editor_tests/server_api_test.cpp +++ b/editor/editor_tests/server_api_test.cpp @@ -95,6 +95,10 @@ UNIT_TEST(OSM_ServerAPI_ChangesetAndNode) // After modification, node version increases in ModifyElement. TEST_EQUAL(node.GetAttribute("version"), "2", ()); + // All tags must be specified, because there is no merging of old and new tags. + api.UpdateChangeSet(changeSetId, {{"created_by", "MAPS.ME Unit Test"}, + {"comment", "For test purposes only (updated)."}}); + // To retrieve created node, changeset should be closed first. // It is done here via Scope Guard. } diff --git a/editor/server_api.cpp b/editor/server_api.cpp index 513fb04a02..1f5fb6b8d4 100644 --- a/editor/server_api.cpp +++ b/editor/server_api.cpp @@ -107,7 +107,7 @@ void ServerApi06::UpdateChangeSet(uint64_t changesetId, TKeyValueTags const & kv { OsmOAuth::Response const response = m_auth.Request("/changeset/" + strings::to_string(changesetId), "PUT", KeyValueTagsToXML(kvTags)); if (response.first != OsmOAuth::HTTP::OK) - MYTHROW(CreateChangeSetHasFailed, ("UpdateChangeSet request has failed:", response)); + MYTHROW(UpdateChangeSetHasFailed, ("UpdateChangeSet request has failed:", response)); } void ServerApi06::CloseChangeSet(uint64_t changesetId) const diff --git a/editor/server_api.hpp b/editor/server_api.hpp index 57027d0462..59bc82c4c7 100644 --- a/editor/server_api.hpp +++ b/editor/server_api.hpp @@ -34,6 +34,7 @@ public: DECLARE_EXCEPTION(NotAuthorized, ServerApi06Exception); DECLARE_EXCEPTION(CantParseServerResponse, ServerApi06Exception); DECLARE_EXCEPTION(CreateChangeSetHasFailed, ServerApi06Exception); + DECLARE_EXCEPTION(UpdateChangeSetHasFailed, ServerApi06Exception); DECLARE_EXCEPTION(CreateElementHasFailed, ServerApi06Exception); DECLARE_EXCEPTION(ModifiedElementHasNoIdAttribute, ServerApi06Exception); DECLARE_EXCEPTION(ModifyElementHasFailed, ServerApi06Exception);