diff --git a/CHANGES b/CHANGES index 8ba18aaf..5cce8547 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,10 @@ +2.4.1: +Bug Fixes: +* The yaml-merge tool (and underlying Merger class) incorrectly assigned "None" + Anchors to all floating-point numbers. This preventing all merging when both + the LHS and RHS documents contained at least one floating-point number, each. + The yaml-merge command now reports version 0.0.2 to reflect this change. + 2.4.0: Enhancements: * Added new reference command-line tool: yaml-merge. This is a very complex diff --git a/setup.py b/setup.py index 80617122..f0a2f20b 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="yamlpath", - version="2.4.0", + version="2.4.1", description="Read and change YAML/Compatible data using powerful, intuitive, command-line friendly syntax", long_description=long_description, long_description_content_type="text/markdown", diff --git a/tests/test_merger_merger.py b/tests/test_merger_merger.py index 076d1b43..9a248997 100644 --- a/tests/test_merger_merger.py +++ b/tests/test_merger_merger.py @@ -318,6 +318,54 @@ def test_merge_deep_hash( and (open(output_file,'r').read() == open(merged_yaml,'r').read()) ) + def test_merge_with_defaults_array_of_floats( + self, quiet_logger, tmp_path, tmp_path_factory + ): + lhs_yaml_file = create_temp_yaml_file(tmp_path_factory, """--- +- 1.1 +- 2.2 +""") + rhs_yaml_file = create_temp_yaml_file(tmp_path_factory, """--- +- 2.2 +- 3.3 +""") + merged_yaml = create_temp_yaml_file(tmp_path_factory, """--- + - 1.1 + - 2.2 + - 2.2 + - 3.3 +""") + + output_dir = tmp_path / "test_merge_with_defaults_simple_array" + output_dir.mkdir() + output_file = output_dir / "output.yaml" + + lhs_yaml = get_yaml_editor() + rhs_yaml = get_yaml_editor() + lhs_data = get_yaml_data(lhs_yaml, quiet_logger, lhs_yaml_file) + rhs_data = get_yaml_data(rhs_yaml, quiet_logger, rhs_yaml_file) + + args = SimpleNamespace() + mc = MergerConfig(quiet_logger, args) + merger = Merger(quiet_logger, lhs_data, mc) + merger.merge_with(rhs_data) + + with open(output_file, 'w') as yaml_dump: + lhs_yaml.dump(merger.data, yaml_dump) + + # DEBUG: + # with open(output_file, 'r') as output_fnd, open(merged_yaml, 'r') as merged_fnd: + # print("Expected:") + # print(merged_fnd.read()) + # print("Got:") + # print(output_fnd.read()) + + assert ( + (os.path.getsize(output_file) == os.path.getsize(merged_yaml)) + and (open(output_file,'r').read() == open(merged_yaml,'r').read()) + ) + + def test_merge_with_defaults_simple_array( self, quiet_logger, tmp_path, tmp_path_factory ): diff --git a/yamlpath/commands/yaml_merge.py b/yamlpath/commands/yaml_merge.py index e4b8467f..97d8b198 100644 --- a/yamlpath/commands/yaml_merge.py +++ b/yamlpath/commands/yaml_merge.py @@ -25,7 +25,7 @@ from yamlpath.wrappers import ConsolePrinter # Implied Constants -MY_VERSION = "0.0.1" +MY_VERSION = "0.0.2" def processcli(): """Process command-line arguments.""" diff --git a/yamlpath/merger/merger.py b/yamlpath/merger/merger.py index ff098def..cbdaee81 100644 --- a/yamlpath/merger/merger.py +++ b/yamlpath/merger/merger.py @@ -537,7 +537,7 @@ def scan_for_anchors(cls, dom: Any, anchors: Dict[str, Any]): for ele in dom: Merger.scan_for_anchors(ele, anchors) - elif hasattr(dom, "anchor"): + elif hasattr(dom, "anchor") and dom.anchor.value is not None: anchors[dom.anchor.value] = dom @classmethod