소스 검색

fix borg config --cache (make sure cache gets closed via try/finally)

Thomas Waldmann 7 년 전
부모
커밋
322b442641
1개의 변경된 파일33개의 추가작업 그리고 32개의 파일을 삭제
  1. 33 32
      src/borg/archiver.py

+ 33 - 32
src/borg/archiver.py

@@ -1774,38 +1774,39 @@ class Archiver:
             assert_secure(repository, manifest)
             assert_secure(repository, manifest)
             cache = Cache(repository, key, manifest, lock_wait=self.lock_wait)
             cache = Cache(repository, key, manifest, lock_wait=self.lock_wait)
 
 
-        if args.cache:
-            cache.cache_config.load()
-            config = cache.cache_config._config
-            save = cache.cache_config.save
-            validate = cache_validate
-        else:
-            config = repository.config
-            save = lambda: repository.save_config(repository.path, repository.config)
-            validate = repo_validate
-
-        if args.delete:
-            validate(section, name, check_value=False)
-            config.remove_option(section, name)
-            if len(config.options(section)) == 0:
-                config.remove_section(section)
-            save()
-        elif args.value:
-            validate(section, name, args.value)
-            if section not in config.sections():
-                config.add_section(section)
-            config.set(section, name, args.value)
-            save()
-        else:
-            try:
-                print(config.get(section, name))
-            except (configparser.NoOptionError, configparser.NoSectionError) as e:
-                print(e, file=sys.stderr)
-                return EXIT_WARNING
-
-        if args.cache:
-            cache.close()
-        return EXIT_SUCCESS
+        try:
+            if args.cache:
+                cache.cache_config.load()
+                config = cache.cache_config._config
+                save = cache.cache_config.save
+                validate = cache_validate
+            else:
+                config = repository.config
+                save = lambda: repository.save_config(repository.path, repository.config)
+                validate = repo_validate
+
+            if args.delete:
+                validate(section, name, check_value=False)
+                config.remove_option(section, name)
+                if len(config.options(section)) == 0:
+                    config.remove_section(section)
+                save()
+            elif args.value:
+                validate(section, name, args.value)
+                if section not in config.sections():
+                    config.add_section(section)
+                config.set(section, name, args.value)
+                save()
+            else:
+                try:
+                    print(config.get(section, name))
+                except (configparser.NoOptionError, configparser.NoSectionError) as e:
+                    print(e, file=sys.stderr)
+                    return EXIT_WARNING
+            return EXIT_SUCCESS
+        finally:
+            if args.cache:
+                cache.close()
 
 
     def do_debug_info(self, args):
     def do_debug_info(self, args):
         """display system information for debugging / bug reports"""
         """display system information for debugging / bug reports"""