Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indexer/indexer_tests/mwm_set_test.cpp2
-rw-r--r--indexer/mwm_set.cpp2
-rw-r--r--indexer/mwm_set.hpp2
-rw-r--r--map/feature_vec_model.cpp2
-rw-r--r--map/framework.cpp2
-rw-r--r--platform/local_country_file.hpp1
-rw-r--r--platform/local_country_file_utils.cpp32
-rw-r--r--platform/local_country_file_utils.hpp1
-rw-r--r--platform/platform_tests/local_country_file_tests.cpp54
-rw-r--r--routing/routing_mapping.cpp2
-rw-r--r--storage/storage.cpp4
11 files changed, 66 insertions, 38 deletions
diff --git a/indexer/indexer_tests/mwm_set_test.cpp b/indexer/indexer_tests/mwm_set_test.cpp
index 7c80aac549..f11a1549ed 100644
--- a/indexer/indexer_tests/mwm_set_test.cpp
+++ b/indexer/indexer_tests/mwm_set_test.cpp
@@ -24,7 +24,7 @@ protected:
// MwmSet overrides:
bool GetVersion(LocalCountryFile const & localFile, MwmInfo & info) const override
{
- int const n = localFile.GetCountryFile().GetNameWithoutExt()[0] - '0';
+ int const n = localFile.GetCountryName()[0] - '0';
info.m_maxScale = n;
info.m_limitRect = m2::RectD(0, 0, 1, 1);
info.m_version.format = version::lastFormat;
diff --git a/indexer/mwm_set.cpp b/indexer/mwm_set.cpp
index 2dab311225..76d21b8656 100644
--- a/indexer/mwm_set.cpp
+++ b/indexer/mwm_set.cpp
@@ -125,7 +125,7 @@ pair<MwmSet::MwmLock, bool> MwmSet::RegisterImpl(LocalCountryFile const & localF
return make_pair(MwmLock(), false);
info->SetStatus(MwmInfo::STATUS_REGISTERED);
info->m_file = localFile;
- string const name = localFile.GetCountryFile().GetNameWithoutExt();
+ string const name = localFile.GetCountryName();
vector<shared_ptr<MwmInfo>> & infos = m_info[name];
infos.push_back(info);
diff --git a/indexer/mwm_set.hpp b/indexer/mwm_set.hpp
index 348bfb9d7a..7c248a6d91 100644
--- a/indexer/mwm_set.hpp
+++ b/indexer/mwm_set.hpp
@@ -57,7 +57,7 @@ public:
inline platform::LocalCountryFile const & GetLocalFile() const { return m_file; }
- inline string GetCountryName() const { return m_file.GetCountryFile().GetNameWithoutExt(); }
+ inline string GetCountryName() const { return m_file.GetCountryName(); }
inline int64_t GetVersion() const { return m_file.GetVersion(); }
diff --git a/map/feature_vec_model.cpp b/map/feature_vec_model.cpp
index 277f9e4371..131eea0b83 100644
--- a/map/feature_vec_model.cpp
+++ b/map/feature_vec_model.cpp
@@ -46,7 +46,7 @@ void FeaturesFetcher::InitClassificator()
pair<MwmSet::MwmLock, bool> FeaturesFetcher::RegisterMap(LocalCountryFile const & localFile)
{
- string const countryFileName = localFile.GetCountryFile().GetNameWithoutExt();
+ string const countryFileName = localFile.GetCountryName();
try
{
pair<MwmSet::MwmLock, bool> result = m_multiIndex.RegisterMap(localFile);
diff --git a/map/framework.cpp b/map/framework.cpp
index b47c471335..292799d0a5 100644
--- a/map/framework.cpp
+++ b/map/framework.cpp
@@ -101,7 +101,7 @@ namespace
pair<MwmSet::MwmLock, bool> Framework::RegisterMap(LocalCountryFile const & localFile)
{
- string const countryFileName = localFile.GetCountryFile().GetNameWithoutExt();
+ string const countryFileName = localFile.GetCountryName();
LOG(LINFO, ("Loading map:", countryFileName));
return m_model.RegisterMap(localFile);
}
diff --git a/platform/local_country_file.hpp b/platform/local_country_file.hpp
index 1a2afa0180..366c2437ff 100644
--- a/platform/local_country_file.hpp
+++ b/platform/local_country_file.hpp
@@ -50,6 +50,7 @@ public:
}
inline string const & GetDirectory() const { return m_directory; }
+ inline string GetCountryName() const { return GetCountryFile().GetNameWithoutExt(); }
inline int64_t GetVersion() const { return m_version; }
inline CountryFile const & GetCountryFile() const { return m_countryFile; }
diff --git a/platform/local_country_file_utils.cpp b/platform/local_country_file_utils.cpp
index f462f92e3d..aa650c1a33 100644
--- a/platform/local_country_file_utils.cpp
+++ b/platform/local_country_file_utils.cpp
@@ -20,7 +20,7 @@ size_t const kMaxTimestampLength = 18;
bool IsSpecialFile(string const & file) { return file == "." || file == ".."; }
-bool CheckedGetFileType(string const & path, Platform::EFileType & type)
+bool GetFileTypeChecked(string const & path, Platform::EFileType & type)
{
Platform::EError const ret = Platform::GetFileType(path, type);
if (ret != Platform::ERR_OK)
@@ -31,7 +31,7 @@ bool CheckedGetFileType(string const & path, Platform::EFileType & type)
return true;
}
-bool CheckedMkDir(string const & directory)
+bool MkDirChecked(string const & directory)
{
Platform & platform = GetPlatform();
Platform::EError const ret = platform.MkDir(directory);
@@ -42,7 +42,7 @@ bool CheckedMkDir(string const & directory)
case Platform::ERR_FILE_ALREADY_EXISTS:
{
Platform::EFileType type;
- if (!CheckedGetFileType(directory, type))
+ if (!GetFileTypeChecked(directory, type))
return false;
if (type != Platform::FILE_TYPE_DIRECTORY)
{
@@ -197,7 +197,7 @@ shared_ptr<LocalCountryFile> PreparePlaceForCountryFiles(CountryFile const & cou
return make_shared<LocalCountryFile>(platform.WritableDir(), countryFile, version);
string const directory =
my::JoinFoldersToPath(platform.WritableDir(), strings::to_string(version));
- if (!CheckedMkDir(directory))
+ if (!MkDirChecked(directory))
return shared_ptr<LocalCountryFile>();
return make_shared<LocalCountryFile>(directory, countryFile, version);
}
@@ -205,39 +205,37 @@ shared_ptr<LocalCountryFile> PreparePlaceForCountryFiles(CountryFile const & cou
// static
bool CountryIndexes::PreparePlaceOnDisk(LocalCountryFile const & localFile)
{
- return CheckedMkDir(IndexesDir(localFile));
+ return MkDirChecked(IndexesDir(localFile));
}
// static
bool CountryIndexes::DeleteFromDisk(LocalCountryFile const & localFile)
{
string const directory = IndexesDir(localFile);
+ bool ok = true;
- vector<string> files;
- Platform::GetFilesByRegExp(directory, "\\.*", files);
- for (string const & file : files)
+ for (auto index : {Index::Bits, Index::Nodes, Index::Offsets})
{
- if (IsSpecialFile(file))
- continue;
- string const path = my::JoinFoldersToPath(directory, file);
- if (!my::DeleteFileX(path))
+ string const path = GetPath(localFile, index);
+ if (Platform::IsFileExistsByFullPath(path) && !my::DeleteFileX(path))
+ {
LOG(LERROR, ("Can't remove country index:", path));
+ ok = false;
+ }
}
Platform::EError const ret = Platform::RmDir(directory);
if (ret != Platform::ERR_OK && ret != Platform::ERR_FILE_DOES_NOT_EXIST)
{
LOG(LERROR, ("Can't remove indexes directory:", directory, ret));
- return false;
+ ok = false;
}
- return true;
+ return ok;
}
// static
string CountryIndexes::GetPath(LocalCountryFile const & localFile, Index index)
{
- string const directory = IndexesDir(localFile);
- string const name = localFile.GetCountryFile().GetNameWithoutExt();
char const * ext = nullptr;
switch (index)
{
@@ -251,7 +249,7 @@ string CountryIndexes::GetPath(LocalCountryFile const & localFile, Index index)
ext = ".offsets";
break;
}
- return my::JoinFoldersToPath(directory, name + ext);
+ return my::JoinFoldersToPath(IndexesDir(localFile), localFile.GetCountryName() + ext);
}
// static
diff --git a/platform/local_country_file_utils.hpp b/platform/local_country_file_utils.hpp
index 2d3987e0d5..eab092e6f8 100644
--- a/platform/local_country_file_utils.hpp
+++ b/platform/local_country_file_utils.hpp
@@ -72,6 +72,7 @@ public:
private:
friend void UnitTest_LocalCountryFile_CountryIndexes();
+ friend void UnitTest_LocalCountryFile_DoNotDeleteUserFiles();
static string IndexesDir(LocalCountryFile const & localFile);
};
diff --git a/platform/platform_tests/local_country_file_tests.cpp b/platform/platform_tests/local_country_file_tests.cpp
index 71989eb980..cb08fa11c4 100644
--- a/platform/platform_tests/local_country_file_tests.cpp
+++ b/platform/platform_tests/local_country_file_tests.cpp
@@ -9,6 +9,7 @@
#include "coding/file_writer.hpp"
#include "coding/internal/file_data.hpp"
+#include "base/logging.hpp"
#include "base/scope_guard.hpp"
#include "defines.hpp"
@@ -424,21 +425,17 @@ UNIT_TEST(LocalCountryFile_PreparePlaceForCountryFiles)
UNIT_TEST(LocalCountryFile_CountryIndexes)
{
- Platform & platform = GetPlatform();
+ ScopedTestDir testDir("101010");
CountryFile germanyFile("Germany");
- shared_ptr<LocalCountryFile> germanyLocalFile =
- platform::PreparePlaceForCountryFiles(germanyFile, 101010 /* version */);
- TEST(germanyLocalFile.get(), ("Can't prepare place for:", germanyFile));
- TEST_EQUAL(my::JoinFoldersToPath(platform.WritableDir(), "101010"),
- germanyLocalFile->GetDirectory(), ());
+ LocalCountryFile germanyLocalFile(testDir.GetFullPath(), germanyFile, 101010 /* version */);
TEST_EQUAL(
- my::JoinFoldersToPath(germanyLocalFile->GetDirectory(), germanyFile.GetNameWithoutExt()),
- CountryIndexes::IndexesDir(*germanyLocalFile), ());
- TEST(CountryIndexes::PreparePlaceOnDisk(*germanyLocalFile),
- ("Can't prepare place for:", *germanyLocalFile));
+ my::JoinFoldersToPath(germanyLocalFile.GetDirectory(), germanyFile.GetNameWithoutExt()),
+ CountryIndexes::IndexesDir(germanyLocalFile), ());
+ TEST(CountryIndexes::PreparePlaceOnDisk(germanyLocalFile),
+ ("Can't prepare place for:", germanyLocalFile));
- string const bitsPath = CountryIndexes::GetPath(*germanyLocalFile, CountryIndexes::Index::Bits);
+ string const bitsPath = CountryIndexes::GetPath(germanyLocalFile, CountryIndexes::Index::Bits);
TEST(!Platform::IsFileExistsByFullPath(bitsPath), (bitsPath));
{
FileWriter writer(bitsPath);
@@ -447,9 +444,40 @@ UNIT_TEST(LocalCountryFile_CountryIndexes)
}
TEST(Platform::IsFileExistsByFullPath(bitsPath), (bitsPath));
- TEST(CountryIndexes::DeleteFromDisk(*germanyLocalFile),
- ("Can't delete indexes for:", *germanyLocalFile));
+ TEST(CountryIndexes::DeleteFromDisk(germanyLocalFile),
+ ("Can't delete indexes for:", germanyLocalFile));
TEST(!Platform::IsFileExistsByFullPath(bitsPath), (bitsPath));
}
+
+UNIT_TEST(LocalCountryFile_DoNotDeleteUserFiles)
+{
+ my::LogLevel oldLogLevel = my::g_LogLevel;
+ my::g_LogLevel = LCRITICAL;
+ MY_SCOPE_GUARD(restoreLogLevel, [&oldLogLevel]()
+ {
+ my::g_LogLevel = oldLogLevel;
+ });
+
+ ScopedTestDir testDir("101010");
+
+ CountryFile germanyFile("Germany");
+ LocalCountryFile germanyLocalFile(testDir.GetFullPath(), germanyFile, 101010 /* version */);
+
+ TEST(CountryIndexes::PreparePlaceOnDisk(germanyLocalFile),
+ ("Can't prepare place for:", germanyLocalFile));
+ string const userFilePath =
+ my::JoinFoldersToPath(CountryIndexes::IndexesDir(germanyLocalFile), "user-data.txt");
+ {
+ FileWriter writer(userFilePath);
+ string const data = "user data";
+ writer.Write(data.data(), data.size());
+ }
+ TEST(!CountryIndexes::DeleteFromDisk(germanyLocalFile),
+ ("Indexes dir should not be deleted for:", germanyLocalFile));
+
+ TEST(my::DeleteFileX(userFilePath), ("Can't delete test file:", userFilePath));
+ TEST(CountryIndexes::DeleteFromDisk(germanyLocalFile),
+ ("Can't delete indexes for:", germanyLocalFile));
+}
} // namespace platform
diff --git a/routing/routing_mapping.cpp b/routing/routing_mapping.cpp
index a7c6f3bf97..3d73e94726 100644
--- a/routing/routing_mapping.cpp
+++ b/routing/routing_mapping.cpp
@@ -33,7 +33,7 @@ RoutingMapping::RoutingMapping(LocalCountryFile const & localFile, Index const *
: m_mapCounter(0),
m_facadeCounter(0),
m_crossContextLoaded(0),
- m_countryFileName(localFile.GetCountryFile().GetNameWithoutExt()),
+ m_countryFileName(localFile.GetCountryName()),
m_isValid(true),
m_error(IRouter::ResultCode::NoError)
{
diff --git a/storage/storage.cpp b/storage/storage.cpp
index 6902c2825e..21abc749b9 100644
--- a/storage/storage.cpp
+++ b/storage/storage.cpp
@@ -135,7 +135,7 @@ void Storage::RegisterAllLocalMaps()
}
LocalCountryFile const & localFile = *i;
- string const name = localFile.GetCountryFile().GetNameWithoutExt();
+ string const name = localFile.GetCountryName();
TIndex index = FindIndexByFile(name);
if (index.IsValid())
RegisterCountryFiles(index, localFile.GetDirectory(), localFile.GetVersion());
@@ -768,7 +768,7 @@ void Storage::RegisterCountryFiles(shared_ptr<LocalCountryFile> localFile)
CHECK(localFile.get(), ());
localFile->SyncWithDisk();
- TIndex const index = FindIndexByFile(localFile->GetCountryFile().GetNameWithoutExt());
+ TIndex const index = FindIndexByFile(localFile->GetCountryName());
shared_ptr<LocalCountryFile> existingFile = GetLocalFile(index, localFile->GetVersion());
if (existingFile.get() != nullptr)
ASSERT_EQUAL(localFile.get(), existingFile.get(), ());