Do not consider missing command as internal failure.

If there is no command specified in the .isolated, which is because there was
none in the .isolate. It is in fact a user error, not an internal error. Report
this accordingly, so that the recipe do not ignore this error.

R=tandrii@chromium.org
BUG=

Review URL: https://codereview.chromium.org/1734743002

Cr-Mirrored-From: https://github.com/luci/luci-py
Cr-Mirrored-Commit: 7272431afa6028a3c5a4525a35dc316b88513b87
diff --git a/isolateserver.py b/isolateserver.py
index e749f3b..cd4ab65 100755
--- a/isolateserver.py
+++ b/isolateserver.py
@@ -110,6 +110,11 @@
   pass
 
 
+class IsolatedErrorNoCommand(isolated_format.IsolatedError):
+  """Signals an early abort due to lack of command specified."""
+  pass
+
+
 class Aborted(Error):
   """Operation aborted."""
   pass
@@ -1829,7 +1834,7 @@
       if require_command and not bundle.command:
         # TODO(vadimsh): All fetch operations are already enqueue and there's no
         # easy way to cancel them.
-        raise isolated_format.IsolatedError('No command to run')
+        raise IsolatedErrorNoCommand()
 
     with tools.Profiler('GetRest'):
       # Create file system hierarchy.