diff options
author | Alexander Batischev <eual.jp@gmail.com> | 2017-09-19 22:04:08 +0300 |
---|---|---|
committer | Alexander Batischev <eual.jp@gmail.com> | 2017-09-20 21:26:58 +0300 |
commit | de4e444bd43e01ff6811d0dd48aa5799e35f38d0 (patch) | |
tree | 02515dece203d57bcd74fab9f0fa21a9174ee867 | |
parent | c63d571089453bf4fe4d765f84a5ca47f826e280 (diff) |
Abort migration if target dirs already exist
-rw-r--r-- | src/controller.cpp | 43 |
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"); |