diff --git a/maintainers/obmc-gerrit b/maintainers/obmc-gerrit
index fae6725..b5bbbb9 100755
--- a/maintainers/obmc-gerrit
+++ b/maintainers/obmc-gerrit
@@ -16,28 +16,34 @@
 
 git = sh.git.bake()
 
-def get_reviewers(root: Optional[str]=None, mname: str='MAINTAINERS') -> List[str]:
+
+def get_reviewers(root: Optional[str] = None, mname: str = "MAINTAINERS") -> List[str]:
     reviewers = cast(List[str], list())
     if not root:
-        root = git('rev-parse', '--show-toplevel').strip()
+        root = git("rev-parse", "--show-toplevel").strip()
     mfile = os.path.join(root, mname)
     if not os.path.exists(mfile):
         return reviewers
-    with open(mfile, 'r') as mstream:
+    with open(mfile, "r") as mstream:
         maintainers.trash_preamble(mstream)
         block = maintainers.parse_block(mstream)
         if not block:
             return reviewers
-        mlist = cast(List[maintainers.Identity],
-                     block[maintainers.LineType.MAINTAINER])
+        mlist = cast(
+            List[maintainers.Identity], block[maintainers.LineType.MAINTAINER]
+        )
         reviewers.extend(i.email.address for i in mlist)
         if maintainers.LineType.REVIEWER in block:
-            rlist = cast(List[maintainers.Identity],
-                         block[maintainers.LineType.REVIEWER])
+            rlist = cast(
+                List[maintainers.Identity], block[maintainers.LineType.REVIEWER]
+            )
             reviewers.extend(i.email.address for i in rlist)
     return reviewers
 
-def gerrit_refspec_args(reviewers: Optional[List[str]]=None, topic: str=None) -> str:
+
+def gerrit_refspec_args(
+    reviewers: Optional[List[str]] = None, topic: str = None
+) -> str:
     argl = []
     if reviewers:
         argl.extend("r={}".format(addr) for addr in reviewers)
@@ -45,25 +51,33 @@
         argl.append("topic={}".format(topic))
     return ",".join(argl)
 
+
 def decorate_refspec(refspec: str, topic: str) -> str:
     gargs = gerrit_refspec_args(get_reviewers(), topic)
     if not gargs:
         return refspec
-    if '%' in refspec:
+    if "%" in refspec:
         return "{},{}".format(refspec, gargs)
     return "{}%{}".format(refspec, gargs)
 
+
 def do_push(args: argparse.Namespace) -> None:
-    git.push(args.remote, decorate_refspec(args.refspec, args.topic),
-             _in=sys.stdin, _out=sys.stdout, _err=sys.stderr)
+    git.push(
+        args.remote,
+        decorate_refspec(args.refspec, args.topic),
+        _in=sys.stdin,
+        _out=sys.stdout,
+        _err=sys.stderr,
+    )
+
 
 parser = argparse.ArgumentParser()
-subbies = parser.add_subparsers(dest='subcommand')
+subbies = parser.add_subparsers(dest="subcommand")
 subbies.required = True
 push = subbies.add_parser("push", help="Push changes to Gerrit with reviewers")
 push.add_argument("remote")
 push.add_argument("refspec")
-push.add_argument("topic", nargs='?', default=None)
+push.add_argument("topic", nargs="?", default=None)
 push.set_defaults(func=do_push)
 
 args = parser.parse_args()
