コード例 #1
0
 def _wrap_app(self, name, app):
     cmds = (k for k in ("command", "stop-command") if k in app)
     for k in cmds:
         try:
             app[k] = self._wrap_exe(app[k], "{}-{}".format(k, name))
         except FileNotFoundError:
             raise errors.InvalidAppCommandError(command=app[k], app=app)
         except meta_errors.CommandError as e:
             raise errors.InvalidAppCommandError(str(e), name)
コード例 #2
0
    def _wrap_app(self, name, app):
        cmds = (k for k in ("command", "stop-command") if k in app)
        for k in cmds:
            try:
                new_command = self._wrap_exe(app[k], "{}-{}".format(k, name))
            except FileNotFoundError:
                raise errors.InvalidAppCommandError(command=app[k], app_name=app)
            except meta_errors.CommandError as e:
                raise errors.InvalidAppCommandError(str(e), name)

            if os.path.isfile(self._meta_runner):
                snap_runner = os.path.relpath(self._meta_runner, self._prime_dir)
                new_command = "{} $SNAP/{}".format(snap_runner, new_command)
            app[k] = new_command
コード例 #3
0
ファイル: _snap_packaging.py プロジェクト: heesen3/snapcraft
 def _wrap_app(self, name, app):
     cmds = (k for k in ('command', 'stop-command') if k in app)
     for k in cmds:
         try:
             app[k] = self._wrap_exe(app[k], '{}-{}'.format(k, name))
         except meta_errors.CommandError as e:
             raise errors.InvalidAppCommandError(str(e), name)
コード例 #4
0
    def _add_command_chain_to_app(self, app_name, app):
        # First, validate the commands. Without a wrapper, we're bound by snapd's
        # restrictions. No quotes, and the first string must be a relative path from
        # the root of the snap.
        commands = (app[k] for k in ("command", "stop-command") if k in app)
        for command in commands:
            if not _APP_COMMAND_PATTERN.match(command):
                raise errors.InvalidAppCommandFormatError(command, app_name)

            command_without_args = command.split()[0]
            binary_path = os.path.join(self._prime_dir, command_without_args)
            is_executable = False
            with contextlib.suppress(FileNotFoundError):
                mode = os.stat(binary_path).st_mode
                is_executable = (
                    mode & stat.S_IXUSR or mode & stat.S_IXGRP or mode & stat.S_IXOTH
                )

            if not is_executable:
                raise errors.InvalidAppCommandError(command_without_args, app_name)

        # Finally, assuming there is a meta runner, add it to the BEGINNING of the
        # command chain. This is to ensure all subsequent commands in the chain get
        # a valid environment.
        if os.path.isfile(self._meta_runner):
            app["command-chain"] = [
                os.path.relpath(self._meta_runner, self._prime_dir)
            ] + app.get("command-chain", [])
コード例 #5
0
ファイル: meta.py プロジェクト: q0wOp/snapcraft
 def _wrap_app(self, name, app):
     cmds = (k for k in ('command', 'stop-command') if k in app)
     for k in cmds:
         try:
             app[k] = self._wrap_exe(app[k], '{}-{}'.format(k, name))
         except CommandError as e:
             raise errors.InvalidAppCommandError(str(e), name)
     desktop_file_name = app.pop('desktop', '')
     if desktop_file_name:
         desktop_file = _DesktopFile(
             name=name, filename=desktop_file_name,
             snap_name=self._config_data['name'], prime_dir=self._prime_dir)
         desktop_file.parse_and_reformat()
         desktop_file.write(gui_dir=os.path.join(self.meta_dir, 'gui'))