| 
														
															@@ -71,17 +71,18 @@ def join_base_dir(*paths, **kw): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return None if base_dir is None else os.path.join(base_dir, *paths) 
														 | 
														
														 | 
														
															     return None if base_dir is None else os.path.join(base_dir, *paths) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def get_keys_dir(*, legacy=False): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def get_keys_dir(*, legacy=False, create=True): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """Determine where to repository keys and cache""" 
														 | 
														
														 | 
														
															     """Determine where to repository keys and cache""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     keys_dir = os.environ.get("BORG_KEYS_DIR") 
														 | 
														
														 | 
														
															     keys_dir = os.environ.get("BORG_KEYS_DIR") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if keys_dir is None: 
														 | 
														
														 | 
														
															     if keys_dir is None: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         # note: do not just give this as default to the environment.get(), see issue #5979. 
														 | 
														
														 | 
														
															         # note: do not just give this as default to the environment.get(), see issue #5979. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         keys_dir = os.path.join(get_config_dir(legacy=legacy), "keys") 
														 | 
														
														 | 
														
															         keys_dir = os.path.join(get_config_dir(legacy=legacy), "keys") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ensure_dir(keys_dir) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if create: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ensure_dir(keys_dir) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return keys_dir 
														 | 
														
														 | 
														
															     return keys_dir 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def get_security_dir(repository_id=None, *, legacy=False): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def get_security_dir(repository_id=None, *, legacy=False, create=True): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """Determine where to store local security information.""" 
														 | 
														
														 | 
														
															     """Determine where to store local security information.""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     security_dir = os.environ.get("BORG_SECURITY_DIR") 
														 | 
														
														 | 
														
															     security_dir = os.environ.get("BORG_SECURITY_DIR") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if security_dir is None: 
														 | 
														
														 | 
														
															     if security_dir is None: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -90,31 +91,30 @@ def get_security_dir(repository_id=None, *, legacy=False): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         security_dir = os.path.join(get_dir(legacy=legacy), "security") 
														 | 
														
														 | 
														
															         security_dir = os.path.join(get_dir(legacy=legacy), "security") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if repository_id: 
														 | 
														
														 | 
														
															     if repository_id: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         security_dir = os.path.join(security_dir, repository_id) 
														 | 
														
														 | 
														
															         security_dir = os.path.join(security_dir, repository_id) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ensure_dir(security_dir) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if create: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ensure_dir(security_dir) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return security_dir 
														 | 
														
														 | 
														
															     return security_dir 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def get_data_dir(*, legacy=False): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def get_data_dir(*, legacy=False, create=True): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """Determine where to store borg changing data on the client""" 
														 | 
														
														 | 
														
															     """Determine where to store borg changing data on the client""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     assert legacy is False, "there is no legacy variant of the borg data dir" 
														 | 
														
														 | 
														
															     assert legacy is False, "there is no legacy variant of the borg data dir" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     data_dir = os.environ.get( 
														 | 
														
														 | 
														
															     data_dir = os.environ.get( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         "BORG_DATA_DIR", join_base_dir(".local", "share", "borg", legacy=legacy) or platformdirs.user_data_dir("borg") 
														 | 
														
														 | 
														
															         "BORG_DATA_DIR", join_base_dir(".local", "share", "borg", legacy=legacy) or platformdirs.user_data_dir("borg") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     ) 
														 | 
														
														 | 
														
															     ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    # Create path if it doesn't exist yet 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ensure_dir(data_dir) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if create: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ensure_dir(data_dir) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return data_dir 
														 | 
														
														 | 
														
															     return data_dir 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def get_runtime_dir(*, legacy=False): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def get_runtime_dir(*, legacy=False, create=True): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """Determine where to store runtime files, like sockets, PID files, ...""" 
														 | 
														
														 | 
														
															     """Determine where to store runtime files, like sockets, PID files, ...""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     assert legacy is False, "there is no legacy variant of the borg runtime dir" 
														 | 
														
														 | 
														
															     assert legacy is False, "there is no legacy variant of the borg runtime dir" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     runtime_dir = os.environ.get( 
														 | 
														
														 | 
														
															     runtime_dir = os.environ.get( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         "BORG_RUNTIME_DIR", join_base_dir(".cache", "borg", legacy=legacy) or platformdirs.user_runtime_dir("borg") 
														 | 
														
														 | 
														
															         "BORG_RUNTIME_DIR", join_base_dir(".cache", "borg", legacy=legacy) or platformdirs.user_runtime_dir("borg") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     ) 
														 | 
														
														 | 
														
															     ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    # Create path if it doesn't exist yet 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ensure_dir(runtime_dir) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if create: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ensure_dir(runtime_dir) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return runtime_dir 
														 | 
														
														 | 
														
															     return runtime_dir 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -122,7 +122,7 @@ def get_socket_filename(): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return os.path.join(get_runtime_dir(), "borg.sock") 
														 | 
														
														 | 
														
															     return os.path.join(get_runtime_dir(), "borg.sock") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def get_cache_dir(*, legacy=False): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def get_cache_dir(*, legacy=False, create=True): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """Determine where to repository keys and cache""" 
														 | 
														
														 | 
														
															     """Determine where to repository keys and cache""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     if legacy: 
														 | 
														
														 | 
														
															     if legacy: 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -137,29 +137,28 @@ def get_cache_dir(*, legacy=False): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         cache_dir = os.environ.get( 
														 | 
														
														 | 
														
															         cache_dir = os.environ.get( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             "BORG_CACHE_DIR", join_base_dir(".cache", "borg", legacy=legacy) or platformdirs.user_cache_dir("borg") 
														 | 
														
														 | 
														
															             "BORG_CACHE_DIR", join_base_dir(".cache", "borg", legacy=legacy) or platformdirs.user_cache_dir("borg") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         ) 
														 | 
														
														 | 
														
															         ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    # Create path if it doesn't exist yet 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ensure_dir(cache_dir) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    cache_tag_fn = os.path.join(cache_dir, CACHE_TAG_NAME) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    if not os.path.exists(cache_tag_fn): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        cache_tag_contents = ( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            CACHE_TAG_CONTENTS 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            + textwrap.dedent( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                """ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        # This file is a cache directory tag created by Borg. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        # For information about cache directory tags, see: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        #       http://www.bford.info/cachedir/spec.html 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        """ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            ).encode("ascii") 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        ) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        from ..platform import SaveFile 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        with SaveFile(cache_tag_fn, binary=True) as fd: 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            fd.write(cache_tag_contents) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if create: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ensure_dir(cache_dir) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        cache_tag_fn = os.path.join(cache_dir, CACHE_TAG_NAME) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if not os.path.exists(cache_tag_fn): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            cache_tag_contents = ( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                CACHE_TAG_CONTENTS 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                + textwrap.dedent( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    """ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            # This file is a cache directory tag created by Borg. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            # For information about cache directory tags, see: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            #       http://www.bford.info/cachedir/spec.html 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            """ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                ).encode("ascii") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            from ..platform import SaveFile 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            with SaveFile(cache_tag_fn, binary=True) as fd: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                fd.write(cache_tag_contents) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return cache_dir 
														 | 
														
														 | 
														
															     return cache_dir 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-def get_config_dir(*, legacy=False): 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+def get_config_dir(*, legacy=False, create=True): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     """Determine where to store whole config""" 
														 | 
														
														 | 
														
															     """Determine where to store whole config""" 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     # Get config home path 
														 | 
														
														 | 
														
															     # Get config home path 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -174,9 +173,8 @@ def get_config_dir(*, legacy=False): 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         config_dir = os.environ.get( 
														 | 
														
														 | 
														
															         config_dir = os.environ.get( 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             "BORG_CONFIG_DIR", join_base_dir(".config", "borg", legacy=legacy) or platformdirs.user_config_dir("borg") 
														 | 
														
														 | 
														
															             "BORG_CONFIG_DIR", join_base_dir(".config", "borg", legacy=legacy) or platformdirs.user_config_dir("borg") 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         ) 
														 | 
														
														 | 
														
															         ) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    # Create path if it doesn't exist yet 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    ensure_dir(config_dir) 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    if create: 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        ensure_dir(config_dir) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     return config_dir 
														 | 
														
														 | 
														
															     return config_dir 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 |