diff --git a/command.py b/command.py
index 7c68ebc..68f36f0 100644
--- a/command.py
+++ b/command.py
@@ -320,7 +320,8 @@
       for arg in args:
         # We have to filter by manifest groups in case the requested project is
         # checked out multiple times or differently based on them.
-        projects = [project for project in manifest.GetProjectsWithName(
+        projects = [project
+                    for project in manifest.GetProjectsWithName(
                         arg, all_manifests=all_manifests)
                     if project.MatchesGroups(groups)]
 
diff --git a/git_command.py b/git_command.py
index 3a3bb34..d4d4bed 100644
--- a/git_command.py
+++ b/git_command.py
@@ -159,12 +159,12 @@
 
 
 def _build_env(
-  _kwargs_only=(),
-  bare: Optional[bool] = False,
-  disable_editor: Optional[bool] = False,
-  ssh_proxy: Optional[Any] = None,
-  gitdir: Optional[str] = None,
-  objdir: Optional[str] = None
+    _kwargs_only=(),
+    bare: Optional[bool] = False,
+    disable_editor: Optional[bool] = False,
+    ssh_proxy: Optional[Any] = None,
+    gitdir: Optional[str] = None,
+    objdir: Optional[str] = None
 ):
   """Constucts an env dict for command execution."""
 
@@ -194,8 +194,7 @@
     env['GIT_OBJECT_DIRECTORY'] = objdir
 
     alt_objects = os.path.join(gitdir, 'objects') if gitdir else None
-    if (alt_objects and
-        os.path.realpath(alt_objects) != os.path.realpath(objdir)):
+    if alt_objects and os.path.realpath(alt_objects) != os.path.realpath(objdir):
       # Allow git to search the original place in case of local or unique refs
       # that git will attempt to resolve even if we aren't fetching them.
       env['GIT_ALTERNATE_OBJECT_DIRECTORIES'] = alt_objects
@@ -236,11 +235,11 @@
         gitdir = gitdir.replace('\\', '/')
 
     env = _build_env(
-      disable_editor=disable_editor,
-      ssh_proxy=ssh_proxy,
-      objdir=objdir,
-      gitdir=gitdir,
-      bare=bare,
+        disable_editor=disable_editor,
+        ssh_proxy=ssh_proxy,
+        objdir=objdir,
+        gitdir=gitdir,
+        bare=bare,
     )
 
     command = [GIT]
@@ -279,7 +278,8 @@
       if 'GIT_OBJECT_DIRECTORY' in env:
         dbg += ': export GIT_OBJECT_DIRECTORY=%s\n' % env['GIT_OBJECT_DIRECTORY']
       if 'GIT_ALTERNATE_OBJECT_DIRECTORIES' in env:
-        dbg += ': export GIT_ALTERNATE_OBJECT_DIRECTORIES=%s\n' % env['GIT_ALTERNATE_OBJECT_DIRECTORIES']
+        dbg += ': export GIT_ALTERNATE_OBJECT_DIRECTORIES=%s\n' % (
+            env['GIT_ALTERNATE_OBJECT_DIRECTORIES'])
 
       dbg += ': '
       dbg += ' '.join(command)
@@ -295,13 +295,13 @@
     with Trace('git command %s %s with debug: %s', LAST_GITDIR, command, dbg):
       try:
         p = subprocess.Popen(command,
-                            cwd=cwd,
-                            env=env,
-                            encoding='utf-8',
-                            errors='backslashreplace',
-                            stdin=stdin,
-                            stdout=stdout,
-                            stderr=stderr)
+                             cwd=cwd,
+                             env=env,
+                             encoding='utf-8',
+                             errors='backslashreplace',
+                             stdin=stdin,
+                             stdout=stdout,
+                             stderr=stderr)
       except Exception as e:
         raise GitError('%s: %s' % (command[1], e))
 
diff --git a/git_config.py b/git_config.py
index af1a101..029beb4 100644
--- a/git_config.py
+++ b/git_config.py
@@ -188,7 +188,7 @@
     if v in ('false', 'no'):
       return False
     print(f"warning: expected {name} to represent a boolean, got {v} instead",
-            file=sys.stderr)
+          file=sys.stderr)
     return None
 
   def SetBoolean(self, name, value):
@@ -197,7 +197,7 @@
       value = 'true' if value else 'false'
     self.SetString(name, value)
 
-  def GetString(self, name: str, all_keys: bool = False) -> Union[str,  None]:
+  def GetString(self, name: str, all_keys: bool = False) -> Union[str, None]:
     """Get the first value for a key, or None if it is not defined.
 
        This configuration file is used first, if the key is not
diff --git a/project.py b/project.py
index 619cdfd..996fc02 100644
--- a/project.py
+++ b/project.py
@@ -54,6 +54,7 @@
   # commit already present.
   remote_fetched: bool
 
+
 # Maximum sleep time allowed during retries.
 MAXIMUM_RETRY_SLEEP_SEC = 3600.0
 # +-10% random jitter is added to each Fetches retry sleep duration.
@@ -63,6 +64,7 @@
 # TODO(vapier): Remove knob once behavior is verified.
 _ALTERNATES = os.environ.get('REPO_USE_ALTERNATES') == '1'
 
+
 def _lwrite(path, content):
   lock = '%s.lock' % path
 
@@ -3415,6 +3417,7 @@
     except OSError:
       return 0
 
+
 class ManifestProject(MetaProject):
   """The MetaProject for manifests."""
 
@@ -3845,11 +3848,12 @@
       self.config.SetBoolean('repo.superproject', use_superproject)
 
     if not standalone_manifest:
-      if not self.Sync_NetworkHalf(
+      success = self.Sync_NetworkHalf(
           is_new=is_new, quiet=not verbose, verbose=verbose,
           clone_bundle=clone_bundle, current_branch_only=current_branch_only,
           tags=tags, submodules=submodules, clone_filter=clone_filter,
-          partial_clone_exclude=self.manifest.PartialCloneExclude).success:
+          partial_clone_exclude=self.manifest.PartialCloneExclude).success
+      if not success:
         r = self.GetRemote()
         print('fatal: cannot obtain manifest %s' % r.url, file=sys.stderr)
 
diff --git a/subcmds/upload.py b/subcmds/upload.py
index 5b17fb5..dc7e26d 100644
--- a/subcmds/upload.py
+++ b/subcmds/upload.py
@@ -615,9 +615,8 @@
       hook = RepoHook.FromSubcmd(
           hook_type='pre-upload', manifest=manifest,
           opt=opt, abort_if_user_denies=True)
-      if not hook.Run(
-          project_list=pending_proj_names,
-          worktree_list=pending_worktrees):
+      if not hook.Run(project_list=pending_proj_names,
+                      worktree_list=pending_worktrees):
         ret = 1
     if ret:
       return ret
