chiark / gitweb /
support pretty output in JSON and for binary transparency logs
authorHans-Christoph Steiner <hans@eds.org>
Sun, 2 Apr 2017 19:58:34 +0000 (21:58 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Mon, 3 Apr 2017 18:24:21 +0000 (20:24 +0200)
This makes make_index_v1() support `fdroid update --pretty`, then also uses
pretty output for the binary transparency logs, so that the git history has
nice, readable diffs between commits.

fdroidserver/common.py
fdroidserver/index.py

index be902c47870fd584c7c03272cb780f3c83a5933e..cc4567dcc139e43c5ed4b462df1e43cf52c33cdb 100644 (file)
@@ -2364,6 +2364,8 @@ def make_binary_transparency_log(repodirs, btrepo='binary_transparency',
     '''
 
     import git
+    import xml.dom.minidom
+
     if os.path.exists(os.path.join(btrepo, '.git')):
         gitrepo = git.Repo(btrepo)
     else:
@@ -2394,7 +2396,16 @@ def make_binary_transparency_log(repodirs, btrepo='binary_transparency',
             if not os.path.exists(repof):
                 continue
             dest = os.path.join(cpdir, f)
-            shutil.copyfile(repof, dest)
+            if f.endswith('.xml'):
+                doc = xml.dom.minidom.parse(repof)
+                output = doc.toprettyxml(encoding='utf-8')
+                with open(dest, 'wb') as f:
+                    f.write(output)
+            elif f.endswith('.json'):
+                with open(repof) as fp:
+                    output = json.load(fp, object_pairs_hook=collections.OrderedDict)
+                with open(dest, 'w') as fp:
+                    json.dump(output, fp, indent=2)
             gitrepo.index.add([repof, ])
         for f in ('index.jar', 'index-v1.jar'):
             repof = os.path.join(repodir, f)
index b42c63d1e37513af8b4955c9f3391c9acf950472..e029fc507f03b6b1d8d1f88ff86564c308bc6260 100644 (file)
@@ -220,7 +220,10 @@ def make_v1(apps, packages, repodir, repodict, requestsdict):
     json_name = 'index-v1.json'
     index_file = os.path.join(repodir, json_name)
     with open(index_file, 'w') as fp:
-        json.dump(output, fp, default=_index_encoder_default)
+        if common.options.pretty:
+            json.dump(output, fp, default=_index_encoder_default, indent=2)
+        else:
+            json.dump(output, fp, default=_index_encoder_default)
 
     if common.options.nosign:
         logging.debug('index-v1 must have a signature, use `fdroid signindex` to create it!')