瀏覽代碼

#32: Fix for upgrade-borgmatic-config converting check_last option as a string instead of an integer.

Dan Helfman 8 年之前
父節點
當前提交
c38f7a3693
共有 4 個文件被更改,包括 25 次插入7 次删除
  1. 4 2
      NEWS
  2. 10 4
      borgmatic/config/convert.py
  3. 10 0
      borgmatic/tests/unit/config/test_convert.py
  4. 1 1
      setup.py

+ 4 - 2
NEWS

@@ -1,6 +1,8 @@
-1.1.1.dev0
+1.1.1
 
- * 
+ * #32: Fix for upgrade-borgmatic-config converting check_last option as a string instead of an
+   integer.
+ * Fix for upgrade-borgmatic-config erroring when consistency checks option is not present.
 
 1.1.0
 

+ 10 - 4
borgmatic/config/convert.py

@@ -10,10 +10,16 @@ def _convert_section(source_section_config, section_schema):
     Given a legacy Parsed_config instance for a single section, convert it to its corresponding
     yaml.comments.CommentedMap representation in preparation for actual serialization to YAML.
 
-    Additionally, use the section schema as a source of helpful comments to include within the
-    returned CommentedMap.
+    Where integer types exist in the given section schema, convert their values to integers.
     '''
-    destination_section_config = yaml.comments.CommentedMap(source_section_config)
+    destination_section_config = yaml.comments.CommentedMap([
+        (
+            option_name,
+            int(option_value)
+                if section_schema['map'].get(option_name, {}).get('type') == 'int' else option_value
+        )
+        for option_name, option_value in source_section_config.items()
+    ])
 
     return destination_section_config
 
@@ -39,7 +45,7 @@ def convert_legacy_parsed_config(source_config, source_excludes, schema):
     location['repositories'] = [location.pop('repository')]
     location['exclude_patterns'] = source_excludes
 
-    if source_config.consistency['checks']:
+    if source_config.consistency.get('checks'):
         destination_config['consistency']['checks'] = source_config.consistency['checks'].split(' ')
 
     # Add comments to each section, and then add comments to the fields in each section.

+ 10 - 0
borgmatic/tests/unit/config/test_convert.py

@@ -10,6 +10,16 @@ from borgmatic.config import convert as module
 Parsed_config = namedtuple('Parsed_config', ('location', 'storage', 'retention', 'consistency'))
 
 
+def test_convert_section_generates_integer_value_for_integer_type_in_schema():
+    flexmock(module.yaml.comments).should_receive('CommentedMap').replace_with(OrderedDict)
+    source_section_config = OrderedDict([('check_last', '3')])
+    section_schema = {'map': {'check_last': {'type': 'int'}}}
+
+    destination_config = module._convert_section(source_section_config, section_schema)
+
+    assert destination_config == OrderedDict([('check_last', 3)])
+
+
 def test_convert_legacy_parsed_config_transforms_source_config_to_mapping():
     flexmock(module.yaml.comments).should_receive('CommentedMap').replace_with(OrderedDict)
     source_config = Parsed_config(

+ 1 - 1
setup.py

@@ -1,7 +1,7 @@
 from setuptools import setup, find_packages
 
 
-VERSION = '1.1.1.dev0'
+VERSION = '1.1.1'
 
 
 setup(