More coding style cleanup

Fixing more issues found with pylint.  Some that were supposed to
have been fixed in the previous sweep (Ie0db839e) but were missed:

C0321: More than one statement on a single line
W0622: Redefining built-in 'name'

And some more:

W0631: Using possibly undefined loop variable 'name'
W0223: Method 'name' is abstract in class 'name' but is not overridden
W0231: __init__ method from base class 'name' is not called

Change-Id: Ie119183708609d6279e973057a385fde864230c3
diff --git a/command.py b/command.py
index e17f0ab..5a5f468 100644
--- a/command.py
+++ b/command.py
@@ -123,6 +123,11 @@
     result.sort(key=_getpath)
     return result
 
+# pylint: disable-msg=W0223
+# Pylint warns that the `InteractiveCommand` and `PagedCommand` classes do not
+# override method `Execute` which is abstract in `Command`.  Since that method
+# is always implemented in classes derived from `InteractiveCommand` and
+# `PagedCommand`, this warning can be suppressed.
 class InteractiveCommand(Command):
   """Command which requires user interaction on the tty and
      must not run within a pager, even if the user asks to.
@@ -137,6 +142,8 @@
   def WantPager(self, opt):
     return True
 
+# pylint: enable-msg=W0223
+
 class MirrorSafeCommand(object):
   """Command permits itself to run within a mirror,
      and does not require a working directory.
diff --git a/error.py b/error.py
index 783ab7d..2148248 100644
--- a/error.py
+++ b/error.py
@@ -25,6 +25,7 @@
   """Unspecified error from the user's text editor.
   """
   def __init__(self, reason):
+    super(EditorError, self).__init__()
     self.reason = reason
 
   def __str__(self):
@@ -34,6 +35,7 @@
   """Unspecified internal error from git.
   """
   def __init__(self, command):
+    super(GitError, self).__init__()
     self.command = command
 
   def __str__(self):
@@ -43,6 +45,7 @@
   """A bundle upload to Gerrit did not succeed.
   """
   def __init__(self, reason):
+    super(UploadError, self).__init__()
     self.reason = reason
 
   def __str__(self):
@@ -52,6 +55,7 @@
   """Cannot download a repository.
   """
   def __init__(self, reason):
+    super(DownloadError, self).__init__()
     self.reason = reason
 
   def __str__(self):
@@ -61,6 +65,7 @@
   """A specified project does not exist in the work tree.
   """
   def __init__(self, name=None):
+    super(NoSuchProjectError, self).__init__()
     self.name = name
 
   def __str__(self):
@@ -73,6 +78,7 @@
   """A specified project is not suitable for the specified groups
   """
   def __init__(self, name=None):
+    super(InvalidProjectGroupsError, self).__init__()
     self.name = name
 
   def __str__(self):
@@ -86,6 +92,7 @@
      use exec to re-execute repo with the new code and manifest.
   """
   def __init__(self, extra_args=None):
+    super(RepoChangedException, self).__init__()
     self.extra_args = extra_args or []
 
 class HookError(Exception):
@@ -93,4 +100,3 @@
 
   The common case is that the file wasn't present when we tried to run it.
   """
-  pass
diff --git a/main.py b/main.py
index 34dd27d..278fd36 100755
--- a/main.py
+++ b/main.py
@@ -45,7 +45,7 @@
 from manifest_xml import XmlManifest
 from pager import RunPager
 
-from subcmds import all as all_commands
+from subcmds import all_commands
 
 global_options = optparse.OptionParser(
                  usage="repo [-p|--paginate|--no-pager] COMMAND [ARGS]"
diff --git a/manifest_xml.py b/manifest_xml.py
index 1207244..04cabaa 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -321,7 +321,8 @@
       raise ManifestParseError("no <manifest> in %s" % (path,))
 
     nodes = []
-    for node in manifest.childNodes:
+    for node in manifest.childNodes:  # pylint:disable-msg=W0631
+                                      # We only get here if manifest is initialised
         if node.nodeName == 'include':
             name = self._reqatt(node, 'name')
             fp = os.path.join(include_root, name)
diff --git a/project.py b/project.py
index 96ab907..472b1d3 100644
--- a/project.py
+++ b/project.py
@@ -724,17 +724,25 @@
     paths.sort()
 
     for p in paths:
-      try: i = di[p]
-      except KeyError: i = None
+      try:
+        i = di[p]
+      except KeyError:
+        i = None
 
-      try: f = df[p]
-      except KeyError: f = None
+      try:
+        f = df[p]
+      except KeyError:
+        f = None
 
-      if i: i_status = i.status.upper()
-      else: i_status = '-'
+      if i:
+        i_status = i.status.upper()
+      else:
+        i_status = '-'
 
-      if f: f_status = f.status.lower()
-      else: f_status = '-'
+      if f:
+        f_status = f.status.lower()
+      else:
+        f_status = '-'
 
       if i and i.src_path:
         line = ' %s%s\t%s => %s (%s%%)' % (i_status, f_status,
diff --git a/subcmds/__init__.py b/subcmds/__init__.py
index a2286e7..1fac802 100644
--- a/subcmds/__init__.py
+++ b/subcmds/__init__.py
@@ -15,7 +15,7 @@
 
 import os
 
-all = {}
+all_commands = {}
 
 my_dir = os.path.dirname(__file__)
 for py in os.listdir(my_dir):
@@ -43,7 +43,7 @@
 
     name = name.replace('_', '-')
     cmd.NAME = name
-    all[name] = cmd
+    all_commands[name] = cmd
 
-if 'help' in all:
-  all['help'].commands = all
+if 'help' in all_commands:
+  all_commands['help'].commands = all_commands
diff --git a/subcmds/abandon.py b/subcmds/abandon.py
index 42abb2f..e17ab2b 100644
--- a/subcmds/abandon.py
+++ b/subcmds/abandon.py
@@ -42,10 +42,10 @@
     nb = args[0]
     err = []
     success = []
-    all = self.GetProjects(args[1:])
+    all_projects = self.GetProjects(args[1:])
 
-    pm = Progress('Abandon %s' % nb, len(all))
-    for project in all:
+    pm = Progress('Abandon %s' % nb, len(all_projects))
+    for project in all_projects:
       pm.update()
 
       status = project.AbandonBranch(nb)
diff --git a/subcmds/branches.py b/subcmds/branches.py
index 81aa5b1..a7ba3d6 100644
--- a/subcmds/branches.py
+++ b/subcmds/branches.py
@@ -93,17 +93,17 @@
   def Execute(self, opt, args):
     projects = self.GetProjects(args)
     out = BranchColoring(self.manifest.manifestProject.config)
-    all = {}
+    all_branches = {}
     project_cnt = len(projects)
 
     for project in projects:
       for name, b in project.GetBranches().iteritems():
         b.project = project
-        if name not in all:
-          all[name] = BranchInfo(name)
-        all[name].add(b)
+        if name not in all_branches:
+          all_branches[name] = BranchInfo(name)
+        all_branches[name].add(b)
 
-    names = all.keys()
+    names = all_branches.keys()
     names.sort()
 
     if not names:
@@ -116,7 +116,7 @@
         width = len(name)
 
     for name in names:
-      i = all[name]
+      i = all_branches[name]
       in_cnt = len(i.projects)
 
       if i.IsCurrent:
diff --git a/subcmds/checkout.py b/subcmds/checkout.py
index 533d20e..bfbe992 100644
--- a/subcmds/checkout.py
+++ b/subcmds/checkout.py
@@ -39,10 +39,10 @@
     nb = args[0]
     err = []
     success = []
-    all = self.GetProjects(args[1:])
+    all_projects = self.GetProjects(args[1:])
 
-    pm = Progress('Checkout %s' % nb, len(all))
-    for project in all:
+    pm = Progress('Checkout %s' % nb, len(all_projects))
+    for project in all_projects:
       pm.update()
 
       status = project.CheckoutBranch(nb)
diff --git a/subcmds/forall.py b/subcmds/forall.py
index 76a0268..2ece95e 100644
--- a/subcmds/forall.py
+++ b/subcmds/forall.py
@@ -141,12 +141,16 @@
       for cn in cmd[1:]:
         if not cn.startswith('-'):
           break
-      if cn in _CAN_COLOR:
+      else:
+        cn = None
+      # pylint: disable-msg=W0631
+      if cn and cn in _CAN_COLOR:
         class ColorCmd(Coloring):
           def __init__(self, config, cmd):
             Coloring.__init__(self, config, cmd)
         if ColorCmd(self.manifest.manifestProject.config, cn).is_on:
           cmd.insert(cmd.index(cn) + 1, '--color')
+      # pylint: enable-msg=W0631
 
     mirror = self.manifest.IsMirror
     out = ForallColoring(self.manifest.manifestProject.config)