summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Batischev <eual.jp@gmail.com>2017-09-19 22:04:08 +0300
committerAlexander Batischev <eual.jp@gmail.com>2017-09-20 21:26:58 +0300
commitde4e444bd43e01ff6811d0dd48aa5799e35f38d0 (patch)
tree02515dece203d57bcd74fab9f0fa21a9174ee867
parentc63d571089453bf4fe4d765f84a5ca47f826e280 (diff)
Abort migration if target dirs already exist
-rw-r--r--src/controller.cpp43
1 files changed, 39 insertions, 4 deletions
diff --git a/src/controller.cpp b/src/controller.cpp
index fe337c28..45ea0a84 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -231,13 +231,36 @@ bool controller::migrate_data_from_newsbeuter_xdg(const char* env_home, bool sil
return false;
}
- utils::mkdir_parents(newsboat_config_dir, 0700);
- utils::mkdir_parents(newsboat_data_dir, 0700);
-
if (! silent) {
std::cerr << "Migrating configs and data from Newsbeuter..." << std::endl;
}
+
+ bool newsboat_config_dir_exists = 0 == access(newsboat_config_dir.c_str(), F_OK);
+ if (newsboat_config_dir_exists) {
+ if (! silent) {
+ std::cerr
+ << newsboat_config_dir
+ << " already exists, aborting XDG migration."
+ << std::endl;
+ }
+ return false;
+ }
+
+ bool newsboat_data_dir_exists = 0 == access(newsboat_data_dir.c_str(), F_OK);
+ if (newsboat_data_dir_exists) {
+ if (! silent) {
+ std::cerr
+ << newsboat_data_dir
+ << " already exists, aborting XDG migration."
+ << std::endl;
+ }
+ return false;
+ }
+
+ utils::mkdir_parents(newsboat_config_dir, 0700);
+ utils::mkdir_parents(newsboat_data_dir, 0700);
+
/* in config */
copy_file(newsbeuter_config_dir + "urls", newsboat_config_dir + "urls");
copy_file(newsbeuter_config_dir + "config", newsboat_config_dir + "config");
@@ -257,7 +280,8 @@ void controller::migrate_data_from_newsbeuter_simple(const char* env_home, bool
newsbeuter_dir += NEWSBEUTER_CONFIG_SUBDIR;
newsbeuter_dir += NEWSBEUTER_PATH_SEP;
- if (0 != access(newsbeuter_dir.c_str(), R_OK | X_OK)) {
+ bool newsbeuter_dir_exists = 0 == access(newsbeuter_dir.c_str(), R_OK | X_OK);
+ if (! newsbeuter_dir_exists) {
return;
}
@@ -270,6 +294,17 @@ void controller::migrate_data_from_newsbeuter_simple(const char* env_home, bool
newsboat_dir += NEWSBOAT_CONFIG_SUBDIR;
newsboat_dir += NEWSBEUTER_PATH_SEP;
+ bool newsboat_dir_exists = 0 == access(newsboat_dir.c_str(), F_OK);
+ if (newsboat_dir_exists) {
+ if (! silent) {
+ std::cerr
+ << newsboat_dir
+ << " already exists, aborting migration."
+ << std::endl;
+ }
+ return;
+ }
+
::mkdir(newsboat_dir.c_str(),0700); // create configuration directory if it doesn't exist
copy_file(newsbeuter_dir + "urls", newsboat_dir + "urls");