diff options
Diffstat (limited to 'bitbake/lib/bb/command.py')
| -rw-r--r-- | bitbake/lib/bb/command.py | 43 | 
1 files changed, 27 insertions, 16 deletions
diff --git a/bitbake/lib/bb/command.py b/bitbake/lib/bb/command.py index 27b5171a6e..3f28bca257 100644 --- a/bitbake/lib/bb/command.py +++ b/bitbake/lib/bb/command.py  | |||
| @@ -44,6 +44,9 @@ class CommandFailed(CommandExit): | |||
| 44 | self.error = message | 44 | self.error = message | 
| 45 | CommandExit.__init__(self, 1) | 45 | CommandExit.__init__(self, 1) | 
| 46 | 46 | ||
| 47 | class CommandError(Exception): | ||
| 48 | pass | ||
| 49 | |||
| 47 | class Command: | 50 | class Command: | 
| 48 | """ | 51 | """ | 
| 49 | A queue of asynchronous commands for bitbake | 52 | A queue of asynchronous commands for bitbake | 
| @@ -57,21 +60,25 @@ class Command: | |||
| 57 | self.currentAsyncCommand = None | 60 | self.currentAsyncCommand = None | 
| 58 | 61 | ||
| 59 | def runCommand(self, commandline): | 62 | def runCommand(self, commandline): | 
| 60 | try: | 63 | command = commandline.pop(0) | 
| 61 | command = commandline.pop(0) | 64 | if hasattr(CommandsSync, command): | 
| 62 | if command in CommandsSync.__dict__: | 65 | # Can run synchronous commands straight away | 
| 63 | # Can run synchronous commands straight away | 66 | command_method = getattr(self.cmds_sync, command) | 
| 64 | return getattr(CommandsSync, command)(self.cmds_sync, self, commandline) | 67 | try: | 
| 65 | if self.currentAsyncCommand is not None: | 68 | result = command_method(self, commandline) | 
| 66 | return "Busy (%s in progress)" % self.currentAsyncCommand[0] | 69 | except CommandError as exc: | 
| 67 | if command not in CommandsAsync.__dict__: | 70 | return None, exc.args[0] | 
| 68 | return "No such command" | 71 | except Exception: | 
| 69 | self.currentAsyncCommand = (command, commandline) | 72 | return None, traceback.format_exc() | 
| 70 | self.cooker.server_registration_cb(self.cooker.runCommands, self.cooker) | 73 | else: | 
| 71 | return True | 74 | return result, None | 
| 72 | except: | 75 | if self.currentAsyncCommand is not None: | 
| 73 | import traceback | 76 | return None, "Busy (%s in progress)" % self.currentAsyncCommand[0] | 
| 74 | return traceback.format_exc() | 77 | if command not in CommandsAsync.__dict__: | 
| 78 | return None, "No such command" | ||
| 79 | self.currentAsyncCommand = (command, commandline) | ||
| 80 | self.cooker.server_registration_cb(self.cooker.runCommands, self.cooker) | ||
| 81 | return True, None | ||
| 75 | 82 | ||
| 76 | def runAsyncCommand(self): | 83 | def runAsyncCommand(self): | 
| 77 | try: | 84 | try: | 
| @@ -139,7 +146,11 @@ class CommandsSync: | |||
| 139 | """ | 146 | """ | 
| 140 | Get any command parsed from the commandline | 147 | Get any command parsed from the commandline | 
| 141 | """ | 148 | """ | 
| 142 | return command.cooker.commandlineAction | 149 | cmd_action = command.cooker.commandlineAction | 
| 150 | if cmd_action['msg']: | ||
| 151 | raise CommandError(msg) | ||
| 152 | else: | ||
| 153 | return cmd_action['action'] | ||
| 143 | 154 | ||
| 144 | def getVariable(self, command, params): | 155 | def getVariable(self, command, params): | 
| 145 | """ | 156 | """ | 
