diff --git a/src/wstool/config_yaml.py b/src/wstool/config_yaml.py index 19f82e5..1f1935a 100644 --- a/src/wstool/config_yaml.py +++ b/src/wstool/config_yaml.py @@ -378,7 +378,11 @@ def get_path_spec_from_yaml(yaml_dict): elif key == "uri": uri = value elif key == "version": - version = value + # VCs tools expects version to be + # string; otherwise, all integer + # versions will break application + if value is not None: + version = str(value) else: raise MultiProjectException( "Unknown key %s in %s" % (key, yaml_dict)) diff --git a/test/local/test_config_yaml.py b/test/local/test_config_yaml.py index 305cab2..5a210d1 100644 --- a/test/local/test_config_yaml.py +++ b/test/local/test_config_yaml.py @@ -326,6 +326,20 @@ def test_original_syntax_scm(self): self.assertEqual(uri, wrap.get_uri()) self.assertEqual({scmtype: {'local-name': local_name, 'uri': uri}}, wrap.get_legacy_yaml()) + # version is a number + local_name = 'common_rosdeps' + version = 1234 + uri = 'https://kforge.ros.org/common/rosdepcore' + scmtype = 'hg' + struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}} + expected_struct = {scmtype: {'local-name': local_name, 'version': str(version), 'uri': uri}} + wrap = get_path_spec_from_yaml(struct) + self.assertEqual(scmtype, wrap.get_scmtype()) + self.assertEqual(scmtype, wrap.get_legacy_type()) + self.assertIsInstance(wrap.get_version(), str) + self.assertEqual(uri, wrap.get_uri()) + self.assertEqual(expected_struct, wrap.get_legacy_yaml()) + # no version local_name = 'common_rosdeps' version = None