diff --git a/pre-upload.py b/pre-upload.py
index 1d1ab0d..a4f1414 100755
--- a/pre-upload.py
+++ b/pre-upload.py
@@ -752,18 +752,18 @@
   # For older years, be a bit more flexible as our policy says leave them be.
   LICENSE_HEADER = (
       r'.* Copyright( \(c\))? 20[-0-9]{2,7} The Chromium OS Authors\. '
-          'All rights reserved\.' '\n'
+      r'All rights reserved\.' r'\n'
       r'.* Use of this source code is governed by a BSD-style license that can '
-          'be\n'
+      r'be\n'
       r'.* found in the LICENSE file\.'
-          '\n'
+      r'\n'
   )
   license_re = re.compile(LICENSE_HEADER, re.MULTILINE)
 
   # For newer years, be stricter.
   COPYRIGHT_LINE = (
       r'.* Copyright \(c\) 20(1[5-9]|[2-9][0-9]) The Chromium OS Authors\. '
-          'All rights reserved\.' '\n'
+      r'All rights reserved\.' r'\n'
   )
   copyright_re = re.compile(COPYRIGHT_LINE)
 
@@ -1284,7 +1284,7 @@
     a blank string upon failure.
   """
   return _run_command(['repo', 'forall', '.', '-c', 'echo ${REPO_PROJECT}'],
-    stderr=subprocess.PIPE, cwd=path).strip()
+                      stderr=subprocess.PIPE, cwd=path).strip()
 
 
 def direct_main(args, verbose=False):
diff --git a/pre-upload_unittest.py b/pre-upload_unittest.py
index 00a098e..e2d14bf 100755
--- a/pre-upload_unittest.py
+++ b/pre-upload_unittest.py
@@ -62,7 +62,7 @@
          (6, u"See https://" + (u"x" * 80)),  # OK (URL)
          (7, u"#  define " + (u"x" * 80)),    # OK (compiler directive)
          (8, u"#define" + (u"x" * 74)),       # Too long
-         ])
+        ])
     self.mox.ReplayAll()
     failure = pre_upload._check_no_long_lines('PROJECT', 'COMMIT')
     self.assertTrue(failure)
@@ -208,7 +208,7 @@
 src_compile() { }
 """
     ret = pre_upload._check_ebuild_eapi('overlay', 'HEAD')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
   def testRejectExplicitEapi1Content(self):
     """Reject ebuilds that do declare old EAPI explicitly."""
@@ -222,17 +222,17 @@
     # Make sure we only check the first EAPI= setting.
     self.content_mock.return_value = template % '1\nEAPI=4'
     ret = pre_upload._check_ebuild_eapi('overlay', 'HEAD')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
     # Verify we handle double quotes too.
     self.content_mock.return_value = template % '"1"'
     ret = pre_upload._check_ebuild_eapi('overlay', 'HEAD')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
     # Verify we handle single quotes too.
     self.content_mock.return_value = template % "'1'"
     ret = pre_upload._check_ebuild_eapi('overlay', 'HEAD')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
   def testAcceptExplicitEapi4Content(self):
     """Accept ebuilds that do declare new EAPI explicitly."""
@@ -297,7 +297,7 @@
 
     ret = pre_upload._check_ebuild_keywords('overlay', 'HEAD')
     if fails:
-      self.assertTrue(isinstance (ret, errors.HookFailure))
+      self.assertTrue(isinstance(ret, errors.HookFailure))
     else:
       self.assertEqual(ret, None)
 
@@ -356,7 +356,7 @@
 
     self.file_mock.return_value = [template % '2']
     ret = pre_upload._check_ebuild_virtual_pv(self.CHROMIUMOS_OVERLAY, 'H')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
   def testPublicBoardVirtuals(self):
     """Public board overlays should use PV=2."""
@@ -367,7 +367,7 @@
 
     self.file_mock.return_value = [template % '2.5']
     ret = pre_upload._check_ebuild_virtual_pv(self.BOARD_OVERLAY, 'H')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
   def testPublicBoardVariantVirtuals(self):
     """Public board variant overlays should use PV=2.5."""
@@ -378,7 +378,7 @@
 
     self.file_mock.return_value = [template % '3']
     ret = pre_upload._check_ebuild_virtual_pv(self.BOARD_OVERLAY, 'H')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
   def testPrivateBoardVirtuals(self):
     """Private board overlays should use PV=3."""
@@ -389,7 +389,7 @@
 
     self.file_mock.return_value = [template % '3.5']
     ret = pre_upload._check_ebuild_virtual_pv(self.PRIVATE_OVERLAY, 'H')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
   def testPrivateBoardVariantVirtuals(self):
     """Private board variant overlays should use PV=3.5."""
@@ -400,7 +400,7 @@
 
     self.file_mock.return_value = [template % '4']
     ret = pre_upload._check_ebuild_virtual_pv(self.PRIVATE_VARIANT_OVERLAY, 'H')
-    self.assertTrue(isinstance (ret, errors.HookFailure))
+    self.assertTrue(isinstance(ret, errors.HookFailure))
 
 
 class CheckGitOutputParsing(cros_test_lib.MockTestCase):
