Browse Source

Create the borgmatic runtime directory if it doesn't exist (#934).

Dan Helfman 6 months ago
parent
commit
b80f60a731
2 changed files with 10 additions and 1 deletions
  1. 1 1
      borgmatic/config/paths.py
  2. 9 0
      tests/unit/config/test_paths.py

+ 1 - 1
borgmatic/config/paths.py

@@ -59,7 +59,6 @@ class Runtime_directory:
         does not get stored in the file path within an archive. That way, the path of the runtime
         directory can change without leaving database dumps within an archive inaccessible.
         '''
-
         runtime_directory = (
             config.get('user_runtime_directory')
             or os.environ.get('XDG_RUNTIME_DIR')  # Set by PAM on Linux.
@@ -82,6 +81,7 @@ class Runtime_directory:
                 base_path if final_directory == 'borgmatic' else runtime_directory, '.', 'borgmatic'
             )
         )
+        os.makedirs(self.runtime_path, mode=0o700, exist_ok=True)
 
     def __enter__(self):
         '''

+ 9 - 0
tests/unit/config/test_paths.py

@@ -35,6 +35,7 @@ def test_get_borgmatic_source_directory_without_config_option_uses_default():
 
 def test_runtime_directory_uses_config_option():
     flexmock(module).should_receive('expand_user_in_path').replace_with(lambda path: path)
+    flexmock(module.os).should_receive('makedirs')
     config = {'user_runtime_directory': '/run', 'borgmatic_source_directory': '/nope'}
 
     with module.Runtime_directory(config) as borgmatic_runtime_directory:
@@ -43,6 +44,7 @@ def test_runtime_directory_uses_config_option():
 
 def test_runtime_directory_uses_config_option_without_adding_duplicate_borgmatic_subdirectory():
     flexmock(module).should_receive('expand_user_in_path').replace_with(lambda path: path)
+    flexmock(module.os).should_receive('makedirs')
     config = {'user_runtime_directory': '/run/borgmatic', 'borgmatic_source_directory': '/nope'}
 
     with module.Runtime_directory(config) as borgmatic_runtime_directory:
@@ -54,6 +56,7 @@ def test_runtime_directory_falls_back_to_xdg_runtime_dir():
     flexmock(module.os.environ).should_receive('get').with_args('XDG_RUNTIME_DIR').and_return(
         '/run'
     )
+    flexmock(module.os).should_receive('makedirs')
 
     with module.Runtime_directory({}) as borgmatic_runtime_directory:
         assert borgmatic_runtime_directory == '/run/./borgmatic'
@@ -64,6 +67,7 @@ def test_runtime_directory_falls_back_to_xdg_runtime_dir_without_adding_duplicat
     flexmock(module.os.environ).should_receive('get').with_args('XDG_RUNTIME_DIR').and_return(
         '/run/borgmatic'
     )
+    flexmock(module.os).should_receive('makedirs')
 
     with module.Runtime_directory({}) as borgmatic_runtime_directory:
         assert borgmatic_runtime_directory == '/run/./borgmatic'
@@ -75,6 +79,7 @@ def test_runtime_directory_falls_back_to_runtime_directory():
     flexmock(module.os.environ).should_receive('get').with_args('RUNTIME_DIRECTORY').and_return(
         '/run'
     )
+    flexmock(module.os).should_receive('makedirs')
 
     with module.Runtime_directory({}) as borgmatic_runtime_directory:
         assert borgmatic_runtime_directory == '/run/./borgmatic'
@@ -86,6 +91,7 @@ def test_runtime_directory_falls_back_to_runtime_directory_without_adding_duplic
     flexmock(module.os.environ).should_receive('get').with_args('RUNTIME_DIRECTORY').and_return(
         '/run/borgmatic'
     )
+    flexmock(module.os).should_receive('makedirs')
 
     with module.Runtime_directory({}) as borgmatic_runtime_directory:
         assert borgmatic_runtime_directory == '/run/./borgmatic'
@@ -103,6 +109,7 @@ def test_runtime_directory_falls_back_to_tmpdir_and_adds_temporary_subdirectory_
     flexmock(module.tempfile).should_receive('TemporaryDirectory').with_args(
         prefix='borgmatic-', dir='/run'
     ).and_return(temporary_directory)
+    flexmock(module.os).should_receive('makedirs')
 
     with module.Runtime_directory({}) as borgmatic_runtime_directory:
         assert borgmatic_runtime_directory == '/run/borgmatic-1234/./borgmatic'
@@ -121,6 +128,7 @@ def test_runtime_directory_falls_back_to_temp_and_adds_temporary_subdirectory_th
     flexmock(module.tempfile).should_receive('TemporaryDirectory').with_args(
         prefix='borgmatic-', dir='/run'
     ).and_return(temporary_directory)
+    flexmock(module.os).should_receive('makedirs')
 
     with module.Runtime_directory({}) as borgmatic_runtime_directory:
         assert borgmatic_runtime_directory == '/run/borgmatic-1234/./borgmatic'
@@ -139,6 +147,7 @@ def test_runtime_directory_falls_back_to_hard_coded_tmp_path_and_adds_temporary_
     flexmock(module.tempfile).should_receive('TemporaryDirectory').with_args(
         prefix='borgmatic-', dir='/tmp'
     ).and_return(temporary_directory)
+    flexmock(module.os).should_receive('makedirs')
 
     with module.Runtime_directory({}) as borgmatic_runtime_directory:
         assert borgmatic_runtime_directory == '/tmp/borgmatic-1234/./borgmatic'