]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Remove cache_dir_levels (CCACHE_NLEVELS) setting
authorJoel Rosdahl <joel@rosdahl.net>
Thu, 10 Sep 2020 08:48:49 +0000 (10:48 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Thu, 17 Sep 2020 20:12:48 +0000 (22:12 +0200)
This is in preparation for two things:

1. Storing cache statistics (except size/files bookkeeping) on level 2
   instead of level 1, thus making “cache_dir_levels = 1” invalid.
2. Implementing automatic choice of cache levels based on the number of
   files in the cache.

doc/MANUAL.adoc
src/Config.cpp
src/Config.hpp
src/Context.cpp
src/Util.cpp
src/Util.hpp
test/suites/base.bash
unittest/test_Config.cpp

index 0e8875a668953f72e74ad43290386d0196b89da3..bc1f4f12a58eecf4d4e14f1d3cea4e8db31497d9 100644 (file)
@@ -341,11 +341,6 @@ You may also want to enable the
     See also <<_location_of_the_primary_configuration_file,LOCATION OF THE
     PRIMARY CONFIGURATION FILE>>.
 
-[[config_cache_dir_levels]] *cache_dir_levels* (*CCACHE_NLEVELS*)::
-
-    This setting allows you to choose the number of directory levels in the
-    cache directory. The default is 2. The minimum is 1 and the maximum is 8.
-
 [[config_compiler]] *compiler* (*CCACHE_COMPILER* or (deprecated) *CCACHE_CC*)::
 
     This setting can be used to force the name of the compiler to use. If set
index 031b13afb4803d420de0f258d99aff831a0f5fa9..b09764280ea8bd0918f4916e6cea90c876404302 100644 (file)
@@ -43,7 +43,6 @@ enum class ConfigItem {
   absolute_paths_in_stderr,
   base_dir,
   cache_dir,
-  cache_dir_levels,
   compiler,
   compiler_check,
   compression,
@@ -83,7 +82,6 @@ const std::unordered_map<std::string, ConfigItem> k_config_key_table = {
   {"absolute_paths_in_stderr", ConfigItem::absolute_paths_in_stderr},
   {"base_dir", ConfigItem::base_dir},
   {"cache_dir", ConfigItem::cache_dir},
-  {"cache_dir_levels", ConfigItem::cache_dir_levels},
   {"compiler", ConfigItem::compiler},
   {"compiler_check", ConfigItem::compiler_check},
   {"compression", ConfigItem::compression},
@@ -146,7 +144,6 @@ const std::unordered_map<std::string, std::string> k_env_variable_table = {
   {"LOGFILE", "log_file"},
   {"MAXFILES", "max_files"},
   {"MAXSIZE", "max_size"},
-  {"NLEVELS", "cache_dir_levels"},
   {"PATH", "path"},
   {"PCH_EXTSUM", "pch_external_checksum"},
   {"PREFIX", "prefix_command"},
@@ -480,9 +477,6 @@ Config::get_string_value(const std::string& key) const
   case ConfigItem::cache_dir:
     return m_cache_dir;
 
-  case ConfigItem::cache_dir_levels:
-    return fmt::format("{}", m_cache_dir_levels);
-
   case ConfigItem::compiler:
     return m_compiler;
 
@@ -682,10 +676,6 @@ Config::set_item(const std::string& key,
     set_cache_dir(Util::expand_environment_variables(value));
     break;
 
-  case ConfigItem::cache_dir_levels:
-    m_cache_dir_levels = Util::parse_unsigned(value, 1, 8, "cache_dir_levels");
-    break;
-
   case ConfigItem::compiler:
     m_compiler = value;
     break;
index cb009d19971cfe24adbf944eeb58f5c5de4f9248..3397db9c2eb1f44dfe839c700c7006b751a01233 100644 (file)
@@ -42,7 +42,6 @@ public:
   bool absolute_paths_in_stderr() const;
   const std::string& base_dir() const;
   const std::string& cache_dir() const;
-  uint32_t cache_dir_levels() const;
   const std::string& compiler() const;
   const std::string& compiler_check() const;
   bool compression() const;
@@ -132,7 +131,6 @@ private:
   bool m_absolute_paths_in_stderr = false;
   std::string m_base_dir = "";
   std::string m_cache_dir;
-  uint32_t m_cache_dir_levels = 2;
   std::string m_compiler = "";
   std::string m_compiler_check = "mtime";
   bool m_compression = true;
@@ -198,12 +196,6 @@ Config::cache_dir() const
   return m_cache_dir;
 }
 
-inline uint32_t
-Config::cache_dir_levels() const
-{
-  return m_cache_dir_levels;
-}
-
 inline const std::string&
 Config::compiler() const
 {
index 31784c1d9337bd066c6faa50c8a91039e6450cb2..07ae4c244c0adacb2220c7977cbd634afab9afed 100644 (file)
@@ -81,8 +81,8 @@ Context::set_path_and_stats_file(const Digest& name,
                                  std::string& stats_file_var) const
 {
   std::string name_string = name.to_string();
-  path_var = Util::get_path_in_cache(
-    config.cache_dir(), config.cache_dir_levels(), name_string, suffix);
+  path_var =
+    Util::get_path_in_cache(config.cache_dir(), 2, name_string, suffix);
   stats_file_var =
     fmt::format("{}/{}/stats", config.cache_dir(), name_string[0]);
 }
index d4654836a0422504ffe38a477a9aabbaf4ef4204..330205a69482cf6ac4ad8440b225319d2e779513 100644 (file)
@@ -740,21 +740,20 @@ get_relative_path(string_view dir, string_view path)
 
 std::string
 get_path_in_cache(string_view cache_dir,
-                  uint32_t levels,
+                  uint8_t level,
                   string_view name,
                   string_view suffix)
 {
-  assert(levels >= 1 && levels <= 8);
-  assert(levels < name.length());
+  assert(level >= 1 && level <= 8);
+  assert(name.length() >= level);
 
   std::string path(cache_dir);
-  path.reserve(path.size() + levels * 2 + 1 + name.length() - levels
+  path.reserve(path.size() + level * 2 + 1 + name.length() - level
                + suffix.length());
 
-  uint32_t level = 0;
-  for (; level < levels; ++level) {
+  for (uint8_t i = 0; i < level; ++i) {
     path.push_back('/');
-    path.push_back(name.at(level));
+    path.push_back(name.at(i));
   }
 
   path.push_back('/');
index e38c667c5b44e6f90ba501f959a8e3d9ce28e22d..da8a8227c77fd410ba2b26ea32959a3c52abbb0e 100644 (file)
@@ -214,16 +214,11 @@ const char* get_hostname();
 std::string get_relative_path(nonstd::string_view dir,
                               nonstd::string_view path);
 
-// Join `cache_dir`, a '/', `name`, and `suffix` into a single path and return
-// it. Additionally `levels` single-character, '/'-separated subpaths are split
+// Join `cache_dir`, a '/', `name` and `suffix` into a single path and return
+// it. Additionally, `level` single-character, '/'-separated subpaths are split
 // from the beginning of `name` before joining them all.
-//
-// `levels` must be less than the length of `name` and in the interval [1,8].
-//
-// E.g. "ABCDEF" and ".foo" will become "/ccache/A/B/CDEF.foo" when the cache
-// directory is "/ccache" and cache dir levels is 2.
 std::string get_path_in_cache(nonstd::string_view cache_dir,
-                              uint32_t levels,
+                              uint8_t level,
                               nonstd::string_view name,
                               nonstd::string_view suffix);
 
index c4389c3cedc6d7d79c1e5c6bd3496d8349464102..73b26125046eef292000c62ea44c94f8a60bf561 100644 (file)
@@ -533,36 +533,6 @@ base_tests() {
     expect_stat 'cache hit (preprocessed)' 2
     expect_stat 'cache miss' 1
 
-    # -------------------------------------------------------------------------
-    TEST "CCACHE_NLEVELS"
-
-    CCACHE_NLEVELS=4 $CCACHE_COMPILE -c test1.c
-    expect_stat 'cache hit (preprocessed)' 0
-    expect_stat 'cache miss' 1
-    expect_stat 'files in cache' 1
-
-    CCACHE_NLEVELS=4 $CCACHE_COMPILE -c test1.c
-    expect_stat 'cache hit (preprocessed)' 1
-    expect_stat 'cache miss' 1
-    expect_stat 'files in cache' 1
-
-    # Directories in $CCACHE_DIR:
-    # - .
-    # - tmp
-    # - a
-    # - a/b
-    # - a/b/c
-    # - a/b/c/d
-    actual_dirs=$(find $CCACHE_DIR -type d | wc -l)
-    if [ -d /run/user/$(id -u) ]; then
-        expected_dirs=5
-    else
-        expected_dirs=6
-    fi
-    if [ $actual_dirs -ne $expected_dirs ]; then
-        test_failed "Expected $expected_dirs directories, found $actual_dirs"
-    fi
-
     # -------------------------------------------------------------------------
     TEST "CCACHE_EXTRAFILES"
 
index bae222551f66243e50ff93d39e86869fd041349c..60f672ed0be814a803b7ba533f7ec4245850b8a2 100644 (file)
@@ -40,7 +40,6 @@ TEST_CASE("Config: default values")
 
   CHECK(config.base_dir().empty());
   CHECK(config.cache_dir().empty()); // Set later
-  CHECK(config.cache_dir_levels() == 2);
   CHECK(config.compiler().empty());
   CHECK(config.compiler_check() == "mtime");
   CHECK(config.compression());
@@ -96,7 +95,6 @@ TEST_CASE("Config::update_from_file")
     "\n"
     "\n"
     "  #A comment\n"
-    " cache_dir_levels = 4\n"
     "\t compiler = foo\n"
     "compiler_check = none\n"
     "compression=false\n"
@@ -135,7 +133,6 @@ TEST_CASE("Config::update_from_file")
   REQUIRE(config.update_from_file("ccache.conf"));
   CHECK(config.base_dir() == base_dir);
   CHECK(config.cache_dir() == fmt::format("{0}$/{0}/.ccache", user));
-  CHECK(config.cache_dir_levels() == 4);
   CHECK(config.compiler() == "foo");
   CHECK(config.compiler_check() == "none");
   CHECK_FALSE(config.compression());
@@ -264,27 +261,6 @@ TEST_CASE("Config::update_from_file, error handling")
     Util::write_file("ccache.conf", "base_dir =");
     CHECK(config.update_from_file("ccache.conf"));
   }
-
-  SUBCASE("bad dir levels")
-  {
-    Util::write_file("ccache.conf", "cache_dir_levels = 0");
-    try {
-      config.update_from_file("ccache.conf");
-      CHECK(false);
-    } catch (const Error& e) {
-      CHECK(std::string(e.what())
-            == "ccache.conf:1: cache_dir_levels must be between 1 and 8");
-    }
-
-    Util::write_file("ccache.conf", "cache_dir_levels = 9");
-    try {
-      config.update_from_file("ccache.conf");
-      CHECK(false);
-    } catch (const Error& e) {
-      CHECK(std::string(e.what())
-            == "ccache.conf:1: cache_dir_levels must be between 1 and 8");
-    }
-  }
 }
 
 TEST_CASE("Config::update_from_environment")
@@ -379,7 +355,6 @@ TEST_CASE("Config::visit_items")
     "base_dir = C:/bd\n"
 #endif
     "cache_dir = cd\n"
-    "cache_dir_levels = 7\n"
     "compiler = c\n"
     "compiler_check = cc\n"
     "compression = true\n"
@@ -435,7 +410,6 @@ TEST_CASE("Config::visit_items")
     "(test.conf) base_dir = C:/bd",
 #endif
     "(test.conf) cache_dir = cd",
-    "(test.conf) cache_dir_levels = 7",
     "(test.conf) compiler = c",
     "(test.conf) compiler_check = cc",
     "(test.conf) compression = true",