subcmds: stop instantiating at import time
The current subcmds design has singletons in all_commands. This isn't
exactly unusual, but the fact that our main & help subcommand will then
attach members to the classes before invoking them is. This makes it
hard to keep track of what members a command has access to, and the two
code paths (main & help) attach different members depending on what APIs
they then invoke.
Lets pull this back a step by storing classes in all_commands and leave
the instantiation step to when they're used. This doesn't fully clean
up the confusion, but gets us closer.
Change-Id: I6a768ff97fe541e6f3228358dba04ed66c4b070a
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/259154
Tested-by: Mike Frysinger <vapier@google.com>
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
diff --git a/subcmds/help.py b/subcmds/help.py
index 5e24ed0..1e16019 100644
--- a/subcmds/help.py
+++ b/subcmds/help.py
@@ -43,7 +43,7 @@
fmt = ' %%-%ds %%s' % maxlen
for name in commandNames:
- command = all_commands[name]
+ command = all_commands[name]()
try:
summary = command.helpSummary.strip()
except AttributeError:
@@ -134,7 +134,7 @@
def _PrintAllCommandHelp(self):
for name in sorted(all_commands):
- cmd = all_commands[name]
+ cmd = all_commands[name]()
cmd.manifest = self.manifest
self._PrintCommandHelp(cmd, header_prefix='[%s] ' % (name,))
@@ -159,7 +159,7 @@
name = args[0]
try:
- cmd = all_commands[name]
+ cmd = all_commands[name]()
except KeyError:
print("repo: '%s' is not a repo command." % name, file=sys.stderr)
sys.exit(1)