diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ed953a7d2..6a70d4d90 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -7,7 +7,6 @@ include_directories (${CMAKE_SOURCE_DIR} ${TASK_INCLUDE_DIRS}) add_library (task CLI2.cpp CLI2.h - Config.cpp Config.h Context.cpp Context.h DOM.cpp DOM.h Dates.cpp Dates.h @@ -32,6 +31,7 @@ add_library (task CLI2.cpp CLI2.h util.cpp util.h) add_library (libshared libshared/src/Color.cpp libshared/src/Color.h + libshared/src/Configuration.cpp libshared/src/Configuration.h libshared/src/Datetime.cpp libshared/src/Datetime.h libshared/src/Duration.cpp libshared/src/Duration.h libshared/src/FS.cpp libshared/src/FS.h diff --git a/src/Context.cpp b/src/Context.cpp index 893bfaa1c..b45ab2145 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -1071,9 +1071,7 @@ void Context::staticInitialization () Task::urgencyAgeMax = config.getReal ("urgency.age.max"); // Tag- and project-specific coefficients. - std::vector all; - config.all (all); - for (auto& var : all) + for (auto& var : config.all ()) if (var.substr (0, 13) == "urgency.user." || var.substr (0, 12) == "urgency.uda.") Task::coefficients[var] = config.getReal (var); diff --git a/src/Context.h b/src/Context.h index 64257d661..670481bf4 100644 --- a/src/Context.h +++ b/src/Context.h @@ -29,7 +29,7 @@ #include #include -#include +#include #include #include #include @@ -81,7 +81,7 @@ public: std::string home_dir {}; File rc_file {"~/.taskrc"}; Path data_dir {"~/.task"}; - Config config {}; + Configuration config {}; TDB2 tdb2 {}; Hooks hooks {}; bool determine_color_use {true}; diff --git a/src/commands/CmdConfig.cpp b/src/commands/CmdConfig.cpp index 0ccdc1529..b0c83836d 100644 --- a/src/commands/CmdConfig.cpp +++ b/src/commands/CmdConfig.cpp @@ -60,7 +60,7 @@ bool CmdConfig::setConfigVariable ( { // Read .taskrc (or equivalent) std::vector contents; - File::read (context.config._original_file, contents); + File::read (context.config.file (), contents); auto found = false; auto change = false; @@ -99,7 +99,7 @@ bool CmdConfig::setConfigVariable ( } if (change) - File::write (context.config._original_file, contents); + File::write (context.config.file (), contents); return change; } @@ -109,7 +109,7 @@ int CmdConfig::unsetConfigVariable (const std::string& name, bool confirmation / { // Read .taskrc (or equivalent) std::vector contents; - File::read (context.config._original_file, contents); + File::read (context.config.file (), contents); auto found = false; auto change = false; @@ -144,7 +144,7 @@ int CmdConfig::unsetConfigVariable (const std::string& name, bool confirmation / } if (change) - File::write (context.config._original_file, contents); + File::write (context.config.file (), contents); if (change && found) return 0; @@ -216,7 +216,7 @@ int CmdConfig::execute (std::string& output) if (change) { out << format (STRING_CMD_CONFIG_FILE_MOD, - context.config._original_file._data) + context.config.file ()) << '\n'; } else @@ -252,8 +252,7 @@ CmdCompletionConfig::CmdCompletionConfig () //////////////////////////////////////////////////////////////////////////////// int CmdCompletionConfig::execute (std::string& output) { - std::vector configs; - context.config.all (configs); + auto configs = context.config.all (); std::sort (configs.begin (), configs.end ()); for (const auto& config : configs) diff --git a/src/commands/CmdDiagnostics.cpp b/src/commands/CmdDiagnostics.cpp index 3950c6429..27e93cdb3 100644 --- a/src/commands/CmdDiagnostics.cpp +++ b/src/commands/CmdDiagnostics.cpp @@ -163,16 +163,17 @@ int CmdDiagnostics::execute (std::string& output) << "\n\n"; // Config: .taskrc found, readable, writable + File rcFile (context.config.file ()); out << bold.colorize (STRING_CMD_DIAG_CONFIG) << '\n' - << " File: " << context.config._original_file._data << ' ' - << (context.config._original_file.exists () + << " File: " << rcFile._data << ' ' + << (rcFile.exists () ? STRING_CMD_DIAG_FOUND : STRING_CMD_DIAG_MISSING) - << ", " << context.config._original_file.size () << ' ' << "bytes" + << ", " << rcFile.size () << ' ' << "bytes" << ", mode " << std::setbase (8) - << context.config._original_file.mode () + << rcFile.mode () << '\n'; // Config: data.location found, readable, writable diff --git a/src/commands/CmdShow.cpp b/src/commands/CmdShow.cpp index bb61d67bd..55212224a 100644 --- a/src/commands/CmdShow.cpp +++ b/src/commands/CmdShow.cpp @@ -253,7 +253,7 @@ int CmdShow::execute (std::string& output) // Find all the values that match the defaults, for highlighting. std::vector default_values; - Config default_config; + Configuration default_config; default_config.parse (configurationDefaults); for (auto& i : context.config) @@ -411,11 +411,8 @@ CmdShowRaw::CmdShowRaw () //////////////////////////////////////////////////////////////////////////////// int CmdShowRaw::execute (std::string& output) { - // Get all the settings. - std::vector all; - context.config.all (all); - - // Sort alphabetically by name. + // Get all the settings and sort alphabetically by name. + auto all = context.config.all (); std::sort (all.begin (), all.end ()); // Display them all. diff --git a/test/.gitignore b/test/.gitignore index b4d38ccdd..70082a941 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -4,7 +4,6 @@ *.log *.runlog col.t -config.t dates.t eval.t iso8601d.t diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e9bd0b7cd..2de4e7697 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -14,7 +14,7 @@ include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/test ${TASK_INCLUDE_DIRS}) -set (test_SRCS col.t config.t nibbler.t t.t tdb2.t util.t view.t lexer.t iso8601d.t iso8601p.t eval.t dates.t variant_add.t variant_and.t variant_cast.t variant_divide.t variant_equal.t variant_exp.t variant_gt.t variant_gte.t variant_inequal.t variant_lt.t variant_lte.t variant_match.t variant_math.t variant_modulo.t variant_multiply.t variant_nomatch.t variant_not.t variant_or.t variant_partial.t variant_subtract.t variant_xor.t) +set (test_SRCS col.t nibbler.t t.t tdb2.t util.t view.t lexer.t iso8601d.t iso8601p.t eval.t dates.t variant_add.t variant_and.t variant_cast.t variant_divide.t variant_equal.t variant_exp.t variant_gt.t variant_gte.t variant_inequal.t variant_lt.t variant_lte.t variant_match.t variant_math.t variant_modulo.t variant_multiply.t variant_nomatch.t variant_not.t variant_or.t variant_partial.t variant_subtract.t variant_xor.t) add_custom_target (test ./run_all --verbose DEPENDS ${test_SRCS} task_executable diff --git a/test/config.t.cpp b/test/config.t.cpp deleted file mode 100644 index a3a7d74f9..000000000 --- a/test/config.t.cpp +++ /dev/null @@ -1,100 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// Copyright 2006 - 2017, Paul Beckingham, Federico Hernandez. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// -// http://www.opensource.org/licenses/mit-license.php -// -//////////////////////////////////////////////////////////////////////////////// - -#include -#include -#include -#include -#include - -Context context; - -//////////////////////////////////////////////////////////////////////////////// -int main (int, char**) -{ - UnitTest t (11); - - // Ensure environment has no influence. - unsetenv ("TASKDATA"); - unsetenv ("TASKRC"); - - Config c; - - // void set (const std::string&, const std::string&); - // const std::string get (const std::string&); - c.set ("str1", "one"); - t.is (c.get ("str1"), "one", "Config::set/get std::string"); - - c.set ("str1", ""); - t.is (c.get ("str1"), "", "Config::set/get std::string"); - - // void set (const std::string&, const int); - // const int getInteger (const std::string&); - c.set ("int1", 1); - t.is (c.getInteger ("int1"), 1, "Config::set/get int"); - - c.set ("int2", 3); - t.is (c.getInteger ("int2"), 3, "Config::set/get int"); - - c.set ("int3", -9); - t.is (c.getInteger ("int3"), -9, "Config::set/get int"); - - // void set (const std::string&, const double); - // const double getReal (const std::string&); - c.set ("double1", 1.0); - t.is (c.getReal ("double1"), 1.0, "Config::set/get double"); - - c.set ("double2", 3.0); - t.is (c.getReal ("double2"), 3.0, "Config::set/get double"); - - c.set ("double3", -9.0); - t.is (c.getReal ("double3"), -9.0, "Config::set/get double"); - - // void set (const std::string&, const bool); - // const bool getBoolean (const std::string&); - c.set ("bool1", false); - t.is (c.getBoolean ("bool1"), false, "Config::set/get bool"); - - c.set ("bool1", true); - t.is (c.getBoolean ("bool1"), true, "Config::set/get bool"); - - // void all (std::vector &); - std::vector all; - c.all (all); - - // 8 created in this test program. - // 22 default report setting created in Config::Config. - t.ok (all.size () >= 8, "Config::all"); - - // TODO Test includes - // TODO Test included nesting limit - // TODO Test included absolute vs relative - // TODO Test included missing file - - return 0; -} - -////////////////////////////////////////////////////////////////////////////////