occa icon indicating copy to clipboard operation
occa copied to clipboard

occa clear issue if OCCA_CACHE_DIR is not default

Open igtrnt opened this issue 4 years ago • 1 comments

occa clear seams to work only if OCCA_CACHE_DIR is unset or default (${HOME}/.occa):

> export OCCA_CACHE_DIR=${HOME}/.occa1
> occa clear --all -y
  Removing [/home/iterentyev/.occa1/]
terminate called after throwing an instance of 'occa::exception'
  what():  
---[ Error ]--------------------------------------------------------------------
    File     : /workspace/occa.repo/src/occa/internal/utils/sys.cpp
    Line     : 285
    Function : rmrf
    Message  : For safety, not deleting [/home/iterentyev/.occa1/]. To disable this error, set 'sys/safe_rmrf' settings to false
    Stack
      9 occa::error(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
      8 occa::sys::rmrf(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
      7 occa::bin::safeRmrf(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)
      6 occa::bin::runClear(occa::json const&)
      5 occa::cli::command::run(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)
      4 occa::cli::command::run(int, char const**)
      3 occa(+0x1292)
      2 /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)
      1 occa(+0x12fe)
================================================================================

Aborted (core dumped)

igtrnt avatar Apr 04 '21 19:04 igtrnt

As I recall this is part of a safety mechanism to ensure that e.g. if OCCA_CACHE_DIR is set to / occa doesn't try to blindly remove everything.

There is a whitelist of sorts of allowed directory names: https://github.com/libocca/occa/blob/c42d2fd6ac8010cf31dbc325b0457fbe889a8e72/src/occa/internal/utils/sys.cpp#L302-L307

So I think e.g. export OCCA_CACHE_DIR=${HOME}/.occa_1 would work in your case.

It could probably use some documentation though.

SFrijters avatar Apr 13 '21 15:04 SFrijters