Esempio n. 1
0
 def test_original_syntax_setupfile(self):
     local_name = '/opt/ros/fuerte/setup.sh'
     version = None
     uri = None
     scmtype = 'setup-file'
     struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
     wrap = get_path_spec_from_yaml(struct)
     self.assertEqual(None, wrap.get_scmtype())
     self.assertEqual(scmtype, wrap.get_legacy_type())
     self.assertEqual(version, wrap.get_version())
     self.assertEqual(uri, wrap.get_uri())
     version = "1234"
     uri = 'https://kforge.ros.org/common/rosdepcore'
     try:
         struct = {"setup-file": {"uri": uri}}
         get_path_spec_from_yaml(struct)
         self.fail("expected exception")
     except MultiProjectException:
         pass
     try:
         struct = {"setup-file": {"version": version}}
         get_path_spec_from_yaml(struct)
         self.fail("expected exception")
     except MultiProjectException:
         pass
Esempio n. 2
0
 def test_original_syntax_setupfile(self):
     local_name = '/opt/ros/fuerte/setup.sh'
     version = None
     uri = None
     scmtype = 'setup-file'
     struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
     wrap = get_path_spec_from_yaml(struct)
     self.assertEqual(None, wrap.get_scmtype())
     self.assertEqual(scmtype, wrap.get_legacy_type())
     self.assertEqual(version, wrap.get_version())
     self.assertEqual(uri, wrap.get_uri())
     version = "1234"
     uri = 'https://kforge.ros.org/common/rosdepcore'
     try:
         struct = {"setup-file": {"uri": uri}}
         get_path_spec_from_yaml(struct)
         self.fail("expected exception")
     except MultiProjectException:
         pass
     try:
         struct = {"setup-file": {"version": version}}
         get_path_spec_from_yaml(struct)
         self.fail("expected exception")
     except MultiProjectException:
         pass
def checkout_rosinstall(rosinstall_data, verbose=False):
    """
    :param rosinstall_data: yaml dict in rosinstall format
    :raises: rosinstall.common.MultiProjectException for incvalid yaml
    """
    for frag in rosinstall_data:
        path_spec = get_path_spec_from_yaml(frag)
        if verbose:
            print(path_spec.get_scmtype(), path_spec.get_path(),
                  path_spec.get_uri(), path_spec.get_version())

        vcs_client = vcstools.get_vcs_client(path_spec.get_scmtype(),
                                             path_spec.get_path())
        vcs_client.checkout(path_spec.get_uri(), path_spec.get_version())
Esempio n. 4
0
def checkout_rosinstall(rosinstall_data, verbose=False):
    """
    :param rosinstall_data: yaml dict in rosinstall format
    :raises: rosinstall.common.MultiProjectException for incvalid yaml
    """
    for frag in rosinstall_data:
        path_spec = get_path_spec_from_yaml(frag)
        if verbose:
            print(path_spec.get_scmtype(),
                  path_spec.get_path(),
                  path_spec.get_uri(),
                  path_spec.get_version())

        vcs_client = vcstools.get_vcs_client(path_spec.get_scmtype(),
                                             path_spec.get_path())
        vcs_client.checkout(path_spec.get_uri(),
                            path_spec.get_version())
Esempio n. 5
0
    def test_original_syntax_invalids(self):
        local_name = 'common_rosdeps'
        version = '1234'
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'

        try:
            struct = {}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"hello world": None}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": None}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": {}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": {"uri": uri}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": {"local-name": local_name}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"foo": {"foo": None}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"other": {"foo": None}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"other": {"uri": uri}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"other": {"version": version}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
Esempio n. 6
0
    def test_original_syntax_scm(self):
        # - hg: {local-name: common_rosdeps, version: common_rosdeps-1.0.2, uri: https://kforge.ros.org/common/rosdepcore}
        local_name = 'common_rosdeps'
        version = 'common_rosdeps-1.0.2'
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(scmtype, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual(struct, wrap.get_legacy_yaml())

        # empty version
        local_name = 'common_rosdeps'
        version = None
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(scmtype, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual({scmtype: {'local-name': local_name, 'uri': uri}}, wrap.get_legacy_yaml())

        # no version
        local_name = 'common_rosdeps'
        version = None
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'
        struct = {scmtype: {'local-name': local_name, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(scmtype, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual({'hg': {'local-name': 'common_rosdeps', 'uri': 'https://kforge.ros.org/common/rosdepcore'}}, wrap.get_legacy_yaml())

        # other
        local_name = 'common_rosdeps'
        version = None
        uri = None
        scmtype = 'other'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(None, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual({scmtype: {'local-name': local_name}}, wrap.get_legacy_yaml())

        # properties (undocumented feature required for builds)
        local_name = 'common_rosdeps'
        version = None
        uri = None
        scmtype = 'other'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri,
                            'meta': {'repo-name': 'skynetish-ros-pkg'}}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(None, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual([{'meta': {'repo-name': 'skynetish-ros-pkg'}}], wrap.get_tags())
        self.assertEqual({scmtype: {'local-name': local_name, 'meta': {'repo-name': 'skynetish-ros-pkg'}}}, wrap.get_legacy_yaml())

        # properties (undocumented feature required for builds)
        local_name = 'common_rosdeps'
        version = None
        uri = 'some/uri'
        scmtype = 'git'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri,
                            'meta': {'repo-name': 'skynetish-ros-pkg'}}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual('git', wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual([{'meta': {'repo-name': 'skynetish-ros-pkg'}}], wrap.get_tags())
        self.assertEqual({scmtype: {'local-name': local_name, 'uri': 'some/uri', 'meta': {'repo-name': 'skynetish-ros-pkg'}}}, wrap.get_legacy_yaml())
Esempio n. 7
0
    def test_original_syntax_invalids(self):
        local_name = 'common_rosdeps'
        version = '1234'
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'

        try:
            struct = {}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"hello world": None}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": None}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": {}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": {"uri": uri}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"git": {"local-name": local_name}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"foo": {"foo": None}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"other": {"foo": None}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"other": {"uri": uri}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
        try:
            struct = {"other": {"version": version}}
            get_path_spec_from_yaml(struct)
            self.fail("expected exception")
        except MultiProjectException:
            pass
Esempio n. 8
0
    def test_original_syntax_scm(self):
        # - hg: {local-name: common_rosdeps, version: common_rosdeps-1.0.2, uri: https://kforge.ros.org/common/rosdepcore}
        local_name = 'common_rosdeps'
        version = 'common_rosdeps-1.0.2'
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(scmtype, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual(struct, wrap.get_legacy_yaml())

        # empty version
        local_name = 'common_rosdeps'
        version = None
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(scmtype, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        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
        uri = 'https://kforge.ros.org/common/rosdepcore'
        scmtype = 'hg'
        struct = {scmtype: {'local-name': local_name, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(scmtype, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual({'hg': {'local-name': 'common_rosdeps', 'uri': 'https://kforge.ros.org/common/rosdepcore'}}, wrap.get_legacy_yaml())

        # other
        local_name = 'common_rosdeps'
        version = None
        uri = None
        scmtype = 'other'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(None, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual({scmtype: {'local-name': local_name}}, wrap.get_legacy_yaml())

        # properties (undocumented feature required for builds)
        local_name = 'common_rosdeps'
        version = None
        uri = None
        scmtype = 'other'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri,
                            'meta': {'repo-name': 'skynetish-ros-pkg'}}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual(None, wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual([{'meta': {'repo-name': 'skynetish-ros-pkg'}}], wrap.get_tags())
        self.assertEqual({scmtype: {'local-name': local_name, 'meta': {'repo-name': 'skynetish-ros-pkg'}}}, wrap.get_legacy_yaml())

        # properties (undocumented feature required for builds)
        local_name = 'common_rosdeps'
        version = None
        uri = 'some/uri'
        scmtype = 'git'
        struct = {scmtype: {'local-name': local_name, 'version': version, 'uri': uri,
                            'meta': {'repo-name': 'skynetish-ros-pkg'}}}
        wrap = get_path_spec_from_yaml(struct)
        self.assertEqual('git', wrap.get_scmtype())
        self.assertEqual(scmtype, wrap.get_legacy_type())
        self.assertEqual(version, wrap.get_version())
        self.assertEqual(uri, wrap.get_uri())
        self.assertEqual([{'meta': {'repo-name': 'skynetish-ros-pkg'}}], wrap.get_tags())
        self.assertEqual({scmtype: {'local-name': local_name, 'uri': 'some/uri', 'meta': {'repo-name': 'skynetish-ros-pkg'}}}, wrap.get_legacy_yaml())
Esempio n. 9
0
    def cmd_merge(self, target_path, argv, config=None):
        parser = OptionParser(
            usage="usage: %s merge [URI] [OPTIONS]" % self.progname,
            formatter=IndentedHelpFormatterWithNL(),
            description=__MULTIPRO_CMD_DICT__["merge"] + """.

The command merges config with given other rosinstall element sets, from files or web uris.

The default workspace will be inferred from context, you can specify one using -t.

By default, when an element in an additional URI has the same
local-name as an existing element, the existing element will be
replaced. In order to ensure the ordering of elements is as
provided in the URI, use the option --merge-kill-append.

Examples:
$ %(prog)s merge someother.rosinstall

You can use '-' to pipe in input, as an example:
$ roslocate info robot_model | %(prog)s merge -
""" % {'prog': self.progname},
            epilog="See: http://www.ros.org/wiki/rosinstall for details\n")
        # same options as for multiproject
        parser.add_option(
            "-a", "--merge-kill-append", dest="merge_kill_append",
            default=False,
            help="merge by deleting given entry and appending new one",
            action="store_true")
        parser.add_option("-k", "--merge-keep", dest="merge_keep",
                          default=False,
                          help="merge by keeping existing entry and discarding new one",
                          action="store_true")
        parser.add_option("-r", "--merge-replace", dest="merge_replace",
                          default=False,
                          help="(default) merge by replacing given entry with new one maintaining ordering",
                          action="store_true")
        parser.add_option("-y", "--confirm-all", dest="confirm_all",
                          default='',
                          help="do not ask for confirmation unless strictly necessary",
                          action="store_true")
        # required here but used one layer above
        parser.add_option(
            "-t", "--target-workspace", dest="workspace", default=None,
            help="which workspace to use",
            action="store")
        (options, args) = parser.parse_args(argv)

        if len(args) > 1:
            print("Error: Too many arguments.")
            print(parser.usage)
            return -1
        if len(args) == 0:
            print("Error: Too few arguments.")
            print(parser.usage)
            return -1

        config_uris = args

        specs = []
        if config_uris[0] == '-':
            pipedata = "".join(sys.stdin.readlines())
            try:
                yamldicts = yaml.load(pipedata)
            except yaml.YAMLError as e:
                raise MultiProjectException(
                    "Invalid yaml format: \n%s \n%s" % (pipedata, e))
            if yamldicts is None:
                parser.error("No Input read from stdin")
            # cant have user interaction and piped input
            options.confirm_all = True
            specs.extend([get_path_spec_from_yaml(x) for x in yamldicts])
            config_uris = []

        merge_strategy = None
        count_mergeoptions = 0
        if options.merge_kill_append:
            merge_strategy = 'KillAppend'
            count_mergeoptions += 1
        if options.merge_keep:
            merge_strategy = 'MergeKeep'
            count_mergeoptions += 1
        if options.merge_replace:
            merge_strategy = 'MergeReplace'
            count_mergeoptions += 1
        if count_mergeoptions > 1:
            parser.error("You can only provide one merge-strategy")
        # default option
        if count_mergeoptions == 0:
            merge_strategy = 'MergeReplace'
        (newconfig, _) = prompt_merge(
            target_path,
            additional_uris=config_uris,
            additional_specs=specs,
            path_change_message="element order changed",
            merge_strategy=merge_strategy,
            confirmed=options.confirm_all,
            config_filename=self.config_filename,
            config=config,
            allow_other_element=self.allow_other_element)
        if newconfig is not None:
            print("Config changed, maybe you need run %s update to update SCM entries." % self.progname)
            print("Overwriting %s" % os.path.join(newconfig.get_base_path(), self.config_filename))
            shutil.move(os.path.join(newconfig.get_base_path(), self.config_filename), "%s.bak" % os.path.join(newconfig.get_base_path(), self.config_filename))
            self.config_generator(newconfig, self.config_filename, get_header(self.progname))
            print("\nupdate complete.")
        else:
            print("Merge caused no change, no new elements found")
        return 0