Add GitcClientCommand class for GITC-specific commands

These won't show up as common commands in the help text unless in a GITC
client, and will refuse to execute.

Change-Id: Iffe82adcc9d6ddde9cb4b204f83ff018042bdab0
diff --git a/command.py b/command.py
index 997acec..cd5e3c3 100644
--- a/command.py
+++ b/command.py
@@ -231,7 +231,12 @@
      and does not require a working directory.
   """
 
-class RequiresGitcCommand(object):
+class GitcAvailableCommand(object):
   """Command that requires GITC to be available, but does
      not require the local client to be a GITC client.
   """
+
+class GitcClientCommand(object):
+  """Command that requires the local client to be a GITC
+     client.
+  """
diff --git a/main.py b/main.py
index a5979a8..4f4eb9f 100755
--- a/main.py
+++ b/main.py
@@ -42,7 +42,7 @@
 from git_config import init_ssh, close_ssh
 from command import InteractiveCommand
 from command import MirrorSafeCommand
-from command import RequiresGitcCommand
+from command import GitcAvailableCommand, GitcClientCommand
 from subcmds.version import Version
 from editor import Editor
 from error import DownloadError
@@ -144,11 +144,16 @@
             file=sys.stderr)
       return 1
 
-    if isinstance(cmd, RequiresGitcCommand) and not gitc_utils.get_gitc_manifest_dir():
+    if isinstance(cmd, GitcAvailableCommand) and not gitc_utils.get_gitc_manifest_dir():
       print("fatal: '%s' requires GITC to be available" % name,
             file=sys.stderr)
       return 1
 
+    if isinstance(cmd, GitcClientCommand) and not gitc_client_name:
+      print("fatal: '%s' requires a GITC client" % name,
+            file=sys.stderr)
+      return 1
+
     try:
       copts, cargs = cmd.OptionParser.parse_args(argv)
       copts = cmd.ReadEnvironmentOptions(copts)
diff --git a/subcmds/gitc_init.py b/subcmds/gitc_init.py
index c243bb3..4f9d734 100644
--- a/subcmds/gitc_init.py
+++ b/subcmds/gitc_init.py
@@ -18,12 +18,12 @@
 import sys
 
 import gitc_utils
-from command import RequiresGitcCommand
+from command import GitcAvailableCommand
 from manifest_xml import GitcManifest
 from subcmds import init
 
 
-class GitcInit(init.Init, RequiresGitcCommand):
+class GitcInit(init.Init, GitcAvailableCommand):
   common = True
   helpSummary = "Initialize a GITC Client."
   helpUsage = """
diff --git a/subcmds/help.py b/subcmds/help.py
index ae5b8f0..9bb4c8c 100644
--- a/subcmds/help.py
+++ b/subcmds/help.py
@@ -19,7 +19,7 @@
 from formatter import AbstractFormatter, DumbWriter
 
 from color import Coloring
-from command import PagedCommand, MirrorSafeCommand, RequiresGitcCommand
+from command import PagedCommand, MirrorSafeCommand, GitcAvailableCommand, GitcClientCommand
 import gitc_utils
 
 class Help(PagedCommand, MirrorSafeCommand):
@@ -57,8 +57,12 @@
     print('The most commonly used repo commands are:')
 
     def gitc_supported(cmd):
-      if not isinstance(cmd, RequiresGitcCommand):
+      if not isinstance(cmd, GitcAvailableCommand) and not isinstance(cmd, GitcClientCommand):
         return True
+      if self.manifest.isGitcClient:
+        return True
+      if isinstance(cmd, GitcClientCommand):
+        return False
       if gitc_utils.get_gitc_manifest_dir():
         return True
       return False