diff --git a/project.py b/project.py
index a0889b3..c3452ae 100644
--- a/project.py
+++ b/project.py
@@ -1421,7 +1421,7 @@
     # because the working tree might not exist yet, and it cannot be used
     # without a working tree in its current implementation.
 
-    def get_submodules(gitdir, rev, path):
+    def get_submodules(gitdir, rev):
       # Parse .gitmodules for submodule sub_paths and sub_urls
       sub_paths, sub_urls = parse_gitmodules(gitdir, rev)
       if not sub_paths:
@@ -1436,7 +1436,6 @@
         except KeyError:
           # Ignore non-exist submodules
           continue
-        sub_gitdir = self.manifest.GetSubprojectPaths(self, sub_path)[2]
         submodules.append((sub_rev, sub_path, sub_url))
       return submodules
 
@@ -1447,7 +1446,7 @@
       try:
         p = GitCommand(None, cmd, capture_stdout = True, capture_stderr = True,
                        bare = True, gitdir = gitdir)
-      except GitError as e:
+      except GitError:
         return [], []
       if p.Wait() != 0:
         return [], []
@@ -1463,7 +1462,7 @@
         if p.Wait() != 0:
           return [], []
         gitmodules_lines = p.stdout.split('\n')
-      except GitError as e:
+      except GitError:
         return [], []
       finally:
         os.remove(temp_gitmodules_path)
@@ -1510,7 +1509,7 @@
       rev = self.GetRevisionId()
     except GitError:
       return []
-    return get_submodules(self.gitdir, rev, '')
+    return get_submodules(self.gitdir, rev)
 
   def GetDerivedSubprojects(self):
     result = []
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 28c154a..64ed38e 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -513,9 +513,9 @@
       previously_missing_set = set()
       while True:
         self.manifest._Unload()
-        all = self.GetProjects(args, missing_ok=True)
+        all_projects = self.GetProjects(args, missing_ok=True)
         missing = []
-        for project in all:
+        for project in all_projects:
           if project.gitdir not in fetched:
             missing.append(project)
         if not missing:
