roll_util: Don't use pprint to print dicts

In Python 3 pprint does additional formatting that it doesn't do in
Python 2. Don't use pprint so we get consistent formatting.

Bug: 465
Change-Id: I971e68bc880d9403609b5d7aa6dee883d1580fdb
Reviewed-on: https://pigweed-review.googlesource.com/c/infra/recipes/+/59284
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Reviewed-by: Oliver Newman <olivernewman@google.com>
Commit-Queue: Rob Mohr <mohrr@google.com>
diff --git a/recipe_modules/roll_util/api.py b/recipe_modules/roll_util/api.py
index b7bcdc1..503e928 100644
--- a/recipe_modules/roll_util/api.py
+++ b/recipe_modules/roll_util/api.py
@@ -14,7 +14,6 @@
 """Utility functions for rollers."""
 
 import collections
-import pprint
 import re
 
 import attr
@@ -260,6 +259,13 @@
     return re.match(r'^[0-9a-fA-F]{40}', value)
 
 
+def _pprint_dict(d):
+    result = []
+    for k, v in sorted(d.items()):
+        result.append('{!r}: {!r}\n'.format(k, v))
+    return ''.join(result)
+
+
 class RollUtilApi(recipe_api.RecipeApi):
     def __init__(self, props, *args, **kwargs):
         super(RollUtilApi, self).__init__(*args, **kwargs)
@@ -344,7 +350,7 @@
             'message for {}'.format(roll.project_name)
         ) as pres:
             pres.logs['template'] = template
-            pres.logs['kwargs'] = pprint.pformat(kwargs)
+            pres.logs['kwargs'] = _pprint_dict(kwargs)
             pres.logs['message'] = message.render()
 
         return message
@@ -388,7 +394,7 @@
 
         with self.m.step.nest('message') as pres:
             pres.logs['template'] = template
-            pres.logs['kwargs'] = pprint.pformat(kwargs)
+            pres.logs['kwargs'] = _pprint_dict(kwargs)
             pres.logs['message'] = message.render()
 
         return message