Mass-migrate string formatting to f-strings

Using https://pypi.org/project/flynt. No expectation diffs. Inspired by
http://fxrev.dev/796162.

Bug: b/240137096
Change-Id: I1f0824fca1bfb6ec096b05e318625df76fa0be4d
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/127391
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Reviewed-by: Ted Pudlik <tpudlik@google.com>
diff --git a/recipe_modules/roll_util/api.py b/recipe_modules/roll_util/api.py
index cdb309d..837d845 100644
--- a/recipe_modules/roll_util/api.py
+++ b/recipe_modules/roll_util/api.py
@@ -122,7 +122,7 @@
     @direction.validator
     def check(self, _, value):  # pragma: no cover
         if value not in _Direction:
-            raise ValueError('invalid direction: {}'.format(value))
+            raise ValueError(f'invalid direction: {value}')
         if value == _Direction.CURRENT:
             raise ValueError('attempt to do a no-op roll')
 
@@ -147,9 +147,7 @@
         ]
 
         if _is_hash(self.old_revision) and self.direction == _Direction.FORWARD:
-            log_cmd.append(
-                '{}..{}'.format(self.old_revision, self.new_revision)
-            )
+            log_cmd.append(f'{self.old_revision}..{self.new_revision}')
         else:
             log_cmd.extend(('--max-count', '5', self.new_revision))
 
@@ -168,7 +166,7 @@
             owner = None
             reviewers = []
 
-            full_host = '{}-review.googlesource.com'.format(self.gerrit_name)
+            full_host = f'{self.gerrit_name}-review.googlesource.com'
 
             changes = []
 
@@ -178,7 +176,7 @@
             if i < 10:
                 changes = self._api.gerrit.change_query(
                     'get change-id',
-                    'commit:{}'.format(commit_hash),
+                    f'commit:{commit_hash}',
                     host=full_host,
                     test_data=self._api.json.test_api.output(
                         [{'_number': 12345}]
@@ -188,7 +186,7 @@
             if changes and len(changes) == 1:
                 number = changes[0]['_number']
                 step = self._api.gerrit.change_details(
-                    'get {}'.format(number),
+                    f'get {number}',
                     number,
                     host=full_host,
                     test_data=self._api.json.test_api.output(
@@ -299,7 +297,7 @@
 def _pprint_dict(d):
     result = []
     for k, v in sorted(d.items()):
-        result.append('{!r}: {!r}\n'.format(k, v))
+        result.append(f'{k!r}: {v!r}\n')
     return ''.join(result)
 
 
@@ -332,7 +330,7 @@
         prefix = 'pigweed.infra.roller.'
         if prefix not in email and not email.endswith('gserviceaccount.com'):
             user, domain = author.email.split('@')
-            email = '{}@{}{}'.format(user, prefix, domain)
+            email = f'{user}@{prefix}{domain}'
 
         return Account(author.name, email,)
 
@@ -351,11 +349,11 @@
             test_data = self.m.json.test_api.output([])
 
         return self.m.gerrit.account_query(
-            email, 'email:{}'.format(email), host=host, test_data=test_data,
+            email, f'email:{email}', host=host, test_data=test_data,
         ).json.output
 
     def include_cc(self, account, cc_domains, host):
-        with self.m.step.nest('cc {}'.format(account.email)) as pres:
+        with self.m.step.nest(f'cc {account.email}') as pres:
             domain = account.email.split('@', 1)[1]
             if domain.endswith('gserviceaccount.com'):
                 pres.step_summary_text = 'not CCing, robot account'
@@ -397,9 +395,7 @@
             footer=tuple(self.footer),
         )
 
-        with self.m.step.nest(
-            'message for {}'.format(roll.project_name)
-        ) as pres:
+        with self.m.step.nest(f'message for {roll.project_name}') as pres:
             pres.logs['template'] = template
             pres.logs['kwargs'] = _pprint_dict(kwargs)
             pres.logs['message'] = message.render()
@@ -480,7 +476,7 @@
             )
         ]
         texts.extend(x.render(with_footer=False) for x in messages)
-        texts.append('\n'.join('{}'.format(x) for x in self.footer))
+        texts.append('\n'.join(f'{x}' for x in self.footer))
 
         return '\n\n'.join(texts)
 
@@ -498,7 +494,7 @@
             else:
                 result = self._single_roll_message(*rolls).render()
             if self._commit_divider:
-                result += '\n{}'.format(self._commit_divider)
+                result += f'\n{self._commit_divider}'
             return result
 
     Direction = _Direction
@@ -579,8 +575,8 @@
             pres.step_summary_text = fmt.format(
                 old=old_revision[0:7], new=new_revision[0:7]
             )
-            pres.links[old_revision] = '{}/+/{}'.format(remote, old_revision)
-            pres.links[new_revision] = '{}/+/{}'.format(remote, new_revision)
+            pres.links[old_revision] = f'{remote}/+/{old_revision}'
+            pres.links[new_revision] = f'{remote}/+/{new_revision}'
 
     def normalize_remote(self, remote, base):
         """Convert relative paths to absolute paths.